Linq:计算子列表出现在另一个列表中的次数

Linq: Count number of times a sub list appear in another list

我想一定有一个简单的方法,但没有找到。我想检查一个项目列表是否(全部或部分)出现在另一个列表中。

例如:假设我有一个部门的人员,如列表 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项运动

等等

从预期的结果来看,您应该像第一个查询一样以部门 table 为基础进行查询。也许像这样在第一个查询中包含体育计数:

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))) 的成员。