我想必须有一个简单的方法,但找不到它。我想检查项目列表是否(完全或部分)出现在另一个列表中。
例如:假设我有一个部门的人员作为清单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体育
等
答案 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))
)。