2011-05-06 3 views
3

저는 현재 SharePoint 2010을 사용하고 있으며 비즈니스 계층에서는 SharePoint에 LINQ를 사용하고 있습니다. SPMetal을 사용하여 모든 Entity 클래스를 생성했습니다.LINQ to sharepoint. 목록 도움말에 합류하십시오.

우리는 라이브러리 시스템을 만들고 있으며, 시스템에는 2 개의 목록이 있습니다. 첫 번째는 Contribution이고 두 번째는 Contributor입니다. 각 Contributor는 Contribution List (PrimaryISBN 참조)에 대한 참조를 포함합니다. Contribution List에는 책 목록이 포함되어 있으며 PrimaryISBN은이 목록에서 고유하지 않습니다.

공헌 나는 현재 이름을 기준으로 특정 사용자가 공헌 모든 책을 가져 오기 위해 노력하고

ID Name PrimaryISBNLookup 
1 ABC PRIM1 
2 DEF PRIM2 

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

기여자. 내 쿼리 내가 현재 직면하고이

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

문제 같은 것이 ISBN 동일하지만 서로 다른 제목이 기록을 검색에있다 (각 형식은 제목과 하드 커버가됩니다 오디오 북 즉, 제목이됩니다 같은 책은 다른 책을 가질 것이다). 이 쿼리는 시스템에 2 개의 레코드가 있다고 생각하는 경우에도 1 개의 레코드 만 반환합니다. 즉, 참여자 목록에 레코드를 삽입하는 동안 강제로 삽입 한 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에서의 DataTable을 사용하려는 경우,이 시도 :

  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"] 

         };