对相关数据使用 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。