LINQ与Contains一起使用时无法正常工作

时间:2015-03-21 14:15:23

标签: c# linq

我有这样的多对多关系:

组织(组织ID,姓名)
类别(CategoryID,名称)
Organisations_Categories(OrganisationID,CategoryID)

我试图获取属于所有的组织列表作为参数传入的类别

e.g。如果10个组织属于CategoryID = 1,0个组织属于CategoryID = 2,并且我传入[1,2]作为CategoryID参数,则应返回0个组织,因为0个组织属于CategoryID = 1和CategoryID = 2

以下是目前的代码:

int[] catIdsSelected = ((catIds.Length > 0) ? Array.ConvertAll(catIds.Split(','), int.Parse) : new int[0]);

if (catIdsSelected.Length > 0)
{
    orgs = orgs.Where(l => l.Categories.Any(m => catIdsSelected.AsQueryable().Contains(m.CategoryID)));
}

但是,这会返回属于传递的任何的组织列表

我已经尝试更换任何'与所有'没有成功

1 个答案:

答案 0 :(得分:0)

你可以做一个小技巧:

if (catIdsSelected.Length > 0)
{
    foreach (var id in carIdsSelected)
    {
       var localId = id;
       orgs = orgs.Where(o => o.Categories.Any(cat => cat.CategoryId == localId));
    }
}

它肯定会起作用,但我不确定EF提供程序生成的查询效率如何。