2016-05-17 63 views
1

我想必須有一個簡單的方法,但不能找到它。我想檢查項目列表是否出現(完全或部分)在另一個列表中。Linq:一個子列表在另一個列表中出現的次數

例如:假設我將一個部門中的人員列爲清單1.然後,我有一份包含該運動參與者清單的體育清單。

現在我想指出一個部門的所有人都會出現多少項運動。

(我知道一些表可能沒有它從標準化的角度看,當感覺,但它更容易這種方式,而不是試圖解釋我的真實的表)

所以我有這樣的事情:

var peopleInDepartment = from d in Department_Members 
         group d by r.DepartmentID into g 
         select new 
         { 
          DepartmentID = g.Key, 
          TeamMembers = g.Select(r => d.PersonID).ToList() 
       }; 

var peopleInTeam = from s in Sports 
        select new 
        { 
         SportID = s.SportID, 
         PeopleInSport = s.Participants.Select(x => x.PersonID), 
         NoOfMatches = peopleInDepartment.Contains(s.Participants.Select(x => x.PersonID)).Count() 
      }; 

這裏的錯誤是peopleInDepartment不包含'Contains'的定義。認爲我只是需要一個新的角度來看待這一點。

作爲最終的結果,我想打印:

系1:該部參加3個運動

部2:該部參與0運動

回答

1

來看從預期的結果中,應該像第一個查詢一樣將查詢基於Department表。也許只是包括像這樣第一次查詢的運動次數:

var peopleInDepartment = 
     from d in Department_Members 
     group d by r.DepartmentID into g 
     select new 
     { 
      DepartmentID = g.Key, 
      TeamMembers = g.Select(r => d.PersonID).ToList(), 
      NumberOfSports = Sports.Count(s => s.Participants 
               .Any(p => g.Select(r => r.PersonID) 
                  .Contains(p.PersonID) 
               ) 
            ) 
     }; 

NumberOfSports應該包含運動,在它的任何參與者被列爲當前部門(g.Select(r => r.PersonID).Contains(p.PersonID)))的成員的數量。

相關問題