SharePoint 服務器端對象模型 之 使用LINQ進行數據訪問操做(Part 2)

(四)使用LINQ進行列表查詢編程

在生成實體類以後,就能夠利用LINQ的強大查詢能力進行SharePoint列表數據的查詢了。在傳統SharePoint對象模型編程中,須要首先獲取網站對象,再進行其餘操做;使用LINQ也是相似,對數據的訪問和操做都要先獲取DataContext網站,以後再經過這個DataContext進行數據訪問。app

一、獲取網站和列表學習

DataContext的建立一樣也是要使用絕對路徑進行構造,並使用GetList方法獲取相應的列表。例以下面的代碼獲取Chapters列表中全部的章節信息:測試

   1: using (DataContext ctx = new DataContext("http://sp2010/book"))
   2: {
   3:     EntityList<Chapters項目> chapters = 
   4:     ctx.GetList<Chapters項目>("Chapters");
   5:     foreach(Chapters項目 chp in chapters)
   6:         Console.WriteLine(chp.Name);
   7: }

固然,咱們也能夠直接使用所生成的強類型的DataContext,並直接獲取相應的列表,以下面的代碼所示:網站

   1: using (BookDataContext ctx = 
   2:     new BookDataContext("http://sp2010/book"))
   3: {
   4:     foreach(Chapters項目 chp in ctx.Chapters)
   5:         Console.WriteLine(chp.Name);
   6: }

二、進行列表查詢ui

使用LINQ,就能夠方便快捷地進行列表查詢,無需再編寫複雜的CAML查詢,下面的例子查找了在Chapters列表中,名稱包含「數據」的章節信息:spa

   1: using (BookDataContext ctx = 
   2:     new BookDataContext("http://sp2010/book"))
   3: {
   4:     var dataChapters = from chp in ctx.Chapters
   5:                        where chp.Name.Contains("數據")
   6:                            select chp;
   7:     foreach(var chp in dataChapters)
   8:         Console.WriteLine(chp.Name + ":" + chp.Writer);
   9: }

因爲在生成的實體類中,查閱項是經過相應的實體引用的方式實現的,在進行列表關聯查詢的時候就會變得異常方便。在以前介紹使用CAML進行列表關聯查詢的時候,咱們曾經假設了一個「訂單 – 銷售 – 城市」的例子,仍以這個查詢爲例,經過下面的代碼就能夠便捷地查詢到全部北京銷售的訂單信息:翻譯

   1: using (DemoDataContext ctx = 
   2:     new DemoDataContext("http://sp2010"))
   3: {
   4:     var bjOrders = from order in ctx.Orders
   5:                    where order.Saler.City.標題 == "北京"
   6:                       select order;
   7:     foreach (var order in bjOrders)
   8:     {
   9:         Console.WriteLine(string.Format("{0}賣了{1}套{2}。",
  10:             order.Saler.標題, order.Amount, order.標題));
  11:     }
  12: }

從這些例子咱們能夠看到,經過使用LINQ to SharePoint以及生成的數據實體類,在編寫列表查詢的時候能夠更加直觀、便捷,因爲Visual Studio的智能感知和編譯時檢查,也不容易出現因失誤所形成的代碼運行錯誤。code

三、查看查詢過程當中的CAMLorm

因爲LINQ to SharePoint會在底層根據列表的結構將查詢轉換成CAML形式的查詢,所以使用LINQ to SharePoint在效率上比傳統的CAML查詢略低一些(經筆者測試,在小數據集上大約要慢10%至20%左右),主要消耗時間的部分在於將LINQ查詢轉換爲CAML查詢的過程,所以當數據量較大的時候,這個轉換所帶來的時間消耗相對就要小不少了。

出於效率考慮,或者出於學習CAML的目的,咱們有時但願可以看到LINQ翻譯成CAML以後的翻譯結果。在DataContext中,也提供了這樣的機制,咱們能夠經過Log屬性觀察到在LINQ查詢的時候是使用怎樣的CAML進行實際列表查詢的,以下例所示:

   1: using (BookDataContext ctx = 
   2:     new BookDataContext("http://sp2010/book"))
   3: {
   4:     StringBuilder builder = new StringBuilder;
   5:     StringWriter writer = new StringWriter(builder);
   6:     ctx.Log = writer;
   7:  
   8:     var dataChapters = from chp in ctx.Chapters
   9:                        where chp.Name.Contains("數據")
  10:                            select chp;
  11:     foreach(var chp in dataChapters)
  12:         Console.WriteLine(chp.Name + ":" + chp.Writer);
  13:  
  14:     // 輸出查詢過程當中所實際使用的CAML:
  15:     writer.Flush();
  16:     Console.WriteLine(builder.ToString());
  17: }
相關文章
相關標籤/搜索