查询相关集合是否有任何条目,但没有导航属性
本文关键字:属性 导航 任何条 集合 是否 查询 | 更新日期: 2023-09-27 18:35:08
下面是外键关系中的表的简单表示例:
Foo Bar
------- -------
FooId BarId
FooName FooId (FK)
BarNumber
假定实体是在 Linq to Entities 上下文中导入的,并创建了一个导航属性Bars
。我现在可以执行这样的查询:
var query = context.Foos.Where(foo => foo.Bars.Any(bar => bar.BarNumber == 42));
它将根据特定表达式返回至少包含一个相关Bar
的所有Foos
。但现在我处于一个特殊方案中,其中不存在导航属性Bars
。
我可以写一本看起来像这样的手册:
var query = context.Foos.Join(context.Bar
.Where(bar => bar.BarNumber == 42),
foo => foo.FooId,
bar => bar.FooId,
(foos, bars) => {
// What here?
});
我不确定这是否是一种正确的方法和/或如何处理结果选择器以获得等效的结果甚至 sql 查询。
只需反转查询,使条件在柱线上:
var bars = context.Bars.Where(bar => bar.BarNumber == 42);
var query = bars.Join(context.Foos,
bar => bar.FooId,
foo => foo.FooId,
(bar, foo) => foo).Distinct();
编辑 - 如果您发现此代码更清晰,则可以使用 GroupJoin:
var query = foos.GroupJoin(context.Bars,
foo => foo.FooId,
bar => bar,
(foo, bars) => { Foo: foo, Bars: bars })
.Where(x.Bars.Any(b => b.BarNumber == 42));