对相关数据使用 where 子句的 Linq 查询
Linq query with where clause on related data
我有一个使用两个 SQL tables(A 和 B)的数据上下文,它们使用以下代码查询:
var query = from b in _ctx.A
.Where(b => b.Flag == true).Include(c => c.B)
select b;
Flag 列位于 table A 中。我想在查询中添加一个额外的 where 子句,以检查 table B 中名为 Qty 的列的值 > 10。
我尝试了以下代码但出现错误:
var query = from b in _ctx.A
.Where(b => b.Flag == true)
.Include(c => c.B.Where(i => i.Qty >= 10))
select b;
错误:
包含路径表达式必须引用在类型上定义的导航 属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。参数名称:路径
我找到了这个参考资料:
但我不明白如何使用 select 进行查询。
如果由于任何其他原因未加载,则包含路径仅用于加载 属性。
无法过滤导航集合,因为它正在建立关系。一直都是"all associated entities somewhere else".
的意思
但是我们可以反向查询,假设 classB 有一个 属性 A of classA。
var query = _ctx.B
.Where(b => b.Qty >=10 && b.A.Flag);
.Include(b => b.A)
本例中的 Where 子句不会加载 属性 B,这只是在服务器上计算。这里的include是真的有必要填属性 A.
现在您将获得所有 B 与关联 A 的列表。
如果您想要 A 的集合,可以按 A
分组
var query = _ctx.B
.Where(b => b.Qty >=10 && b.A.Flag)
.GroupBy(x => x.A);
这将生成 A 的集合,以及所有相关联的数量 >10 的 B。
我有一个使用两个 SQL tables(A 和 B)的数据上下文,它们使用以下代码查询:
var query = from b in _ctx.A
.Where(b => b.Flag == true).Include(c => c.B)
select b;
Flag 列位于 table A 中。我想在查询中添加一个额外的 where 子句,以检查 table B 中名为 Qty 的列的值 > 10。
我尝试了以下代码但出现错误:
var query = from b in _ctx.A
.Where(b => b.Flag == true)
.Include(c => c.B.Where(i => i.Qty >= 10))
select b;
错误: 包含路径表达式必须引用在类型上定义的导航 属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。参数名称:路径
我找到了这个参考资料:
但我不明白如何使用 select 进行查询。
如果由于任何其他原因未加载,则包含路径仅用于加载 属性。
无法过滤导航集合,因为它正在建立关系。一直都是"all associated entities somewhere else".
的意思但是我们可以反向查询,假设 classB 有一个 属性 A of classA。
var query = _ctx.B
.Where(b => b.Qty >=10 && b.A.Flag);
.Include(b => b.A)
本例中的 Where 子句不会加载 属性 B,这只是在服务器上计算。这里的include是真的有必要填属性 A.
现在您将获得所有 B 与关联 A 的列表。 如果您想要 A 的集合,可以按 A
分组 var query = _ctx.B
.Where(b => b.Qty >=10 && b.A.Flag)
.GroupBy(x => x.A);
这将生成 A 的集合,以及所有相关联的数量 >10 的 B。