多对多关系的 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)));
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)));