2011-05-06 19 views
3

我目前使用SharePoint 2010,並在我的業務層中使用LINQ to SharePoint。我使用SPMetal生成了所有實體類。LINQ到共享點。加入列表幫助

我們正在創建一個圖書館系統,我的系統有2個列表。第一個是貢獻,第二個是貢獻者。每個貢獻者都包含對貢獻列表(PrimaryISBN參考)的引用。貢獻列表包含書籍列表,並且PrimaryISBN在此列表中不是唯一的。

貢獻

ID PrimaryISBN  TITLE  
1 PRIM1   HardcoverLOTR  
2 PRIM1   AudioBookLOTR  
3 PRIM2   HardcoverHP   

貢獻者

ID Name PrimaryISBNLookup 
1 ABC PRIM1 
2 DEF PRIM2 

目前我正在試圖獲取提供者基於該名稱的特定用戶的所有書籍。 我的查詢是這樣

var result = from _contributor in data.contributor 
      where _contributor.Name= "ABC" 
      select new Book 
      { 
       Title = contributor.PrimaryISBNLookup.Title 
      } 

,我目前所面臨的問題是,在檢索具有相同的ISBN,但不同的標題記錄(每種格式都將有一個標題即有聲書將有一個標題和一個精裝的同一本書將有不同的)。 此查詢只返回1條記錄,甚至認爲我的系統中有2條記錄,即在將記錄插入到貢獻者列表期間強制插入ID(在貢獻中)的記錄。

非常感謝您的幫助。

回答

1

據我所知,您嘗試實現一個簡單的連接,就像這樣:

var results = from _contributor in data.contributor 
       join _contribution in data.contribution 
       on _contributor.PrimaryISBNLookup equals _contribution.PrimaryISBN 
       where _contributor.Name == "ABC" 
       select new Book 
       { 
        Title = _contribution.Title 
       } 
0

如果你想在SPList使用數據表,試試這個:

  SPList cList = spWeb.Lists.TryGetList("Customer"); 
      SPList oList = spWeb.Lists.TryGetList("Order"); 


      DataTable cTable= cList.Items.GetDataTable(); 
      DataTable oTable= oList.Items.GetDataTable(); 

      var coList = from tbl1 in cTable.AsEnumerable() 
         join tbl2 in oTable.AsEnumerable() on tbl1["Title"] equals   tbl2["CustomerName"] 
         select new 
         { 
          ItemName = tbl2["Title"], 
          CustomerName = tbl1["Title"], 
          Mobile = tbl1["MobileNo"] 

         };