多对多关系的 LINQ lambda

LINQ lambda for many to many relationship

Products 和 CategoryGroups 之间存在多对多数据关系,我正在选择也在特定 CategoryGroups 中的所有产品(从 productList 的起点开始)(CategoryGroup ID 列表在groupIds).

这可以使用以下 LINQ 表达式成功实现:

productList =
    from p in productList
    where (
    from g in p.CategoryGroup
    where groupIds.Contains(g.CategoryGroupId)
    select g
    ).Any()
    select p;

其中:

var productList = db.Products
    .Where(a => a.ThisCondition == thisCondition)
    .ToList();  

var groupIds = db.CategoryGroups
    .Where(a => a.ThatCondition == thatCondition)
    .Select(a => a.CategoryGroupId)
    .ToList();

是否可以用一个 LINQ lambda 表达式替换 productList LINQ 表达式?

非常感谢任何帮助。

如果您使用两个集合导航属性来表示多对多关系,例如 tutorial,您可以将查询简化为:

var productList = db.Products
                    .Where(a => a.ThisCondition == thisCondition 
                                && a.CategoryGroups.Count(c=>groupIds.Contains(c.CategoryGroupId))>0);

或者您也可以使用 Any 扩展方法:

var productList = db.Products
                    .Where(a => a.ThisCondition == thisCondition 
                                && a.CategoryGroups.Any(c=>groupIds.Contains(c.CategoryGroupId)));