使用 linq lambda 表达式的查询列表

use*_*606 5 c# linq

我如何获得县列表中的参与者?我获取 var 县中的县,然后我想获取县列表中具有 CountyOfParticipationId 的所有参与者。

if (collaborationId != null)
{
    var counties = (from c in db.CountyCollaborations
                    where c.CollaborationId == collaborationId
                    select c).ToList();
    participants = participants.Where(p => p.CountyOfParticipationId in counties);


}
Run Code Online (Sandbox Code Playgroud)

jod*_*ods 4

.Where(p => counties.Contains(p.CountyOfParticipationId))

现在,如果有大量数据,请注意其复杂性。Contains列表中的时间复杂度为 O(n),因此总体算法为 O(n*m),其中 n,m 是参与者数量和县数量。

为了获得更好的性能,您可以将县存储在 HashSet 中,该 HashSet 的 Contains 复杂度为 O(1),意味着总体复杂度为 O(n)。

当然,如果县的数量很少,那也没关系。

编辑:刚刚注意到您的列表不包含 id,而是包含完整的对象。为了使上面的代码正常工作,您还需要将 linq 查询从select ctoselect c.Id或类似的内容更改为(不知道字段的名称)。