C# 查询相关集合是否有任何条目,但没有导航属性

C# 查询相关集合是否有任何条目,但没有导航属性,c#,sql-server,linq,sql-server-2008-r2,linq-to-entities,C#,Sql Server,Linq,Sql Server 2008 R2,Linq To Entities,以下是外键关系表的简单表示例: Foo Bar ------- ------- FooId BarId FooName FooId (FK) BarNumber 假设在Linq to entities上下文中导入实体,并创建导航属性条。我现在可以执行如下查询: var query = context.Foos.Where(foo => foo.Bars.Any(bar => ba

以下是外键关系表的简单表示例:

Foo            Bar
-------        -------
FooId          BarId  
FooName        FooId (FK) 
               BarNumber
假设在Linq to entities上下文中导入实体,并创建导航属性
。我现在可以执行如下查询:

var query = context.Foos.Where(foo => foo.Bars.Any(bar => bar.BarNumber == 42));
var query = context.Foos.Join(context.Bar
                    .Where(bar => bar.BarNumber == 42),
                    foo => foo.FooId,
                    bar => bar.FooId,
                    (foos, bars) => {
                        // What here?
                    });
它将返回所有
foo
,根据特定表达式,这些foo至少包含一个相关的
Bar

我可以写一本这样的手册:

var query = context.Foos.Where(foo => foo.Bars.Any(bar => bar.BarNumber == 42));
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));

好的,但这意味着我必须坚持一个连接/独特的组合,不能使用像“Any”这样的聚合。谢谢,现在使用第一次尝试,但组合到一个查询中:
var query=context.bar.Where(bar=>bar.BarNumber==42)。Join(context.Foos,bar=>bar.FooId,foo=>foo.FooId,(bar,foo)=>foo.Distinct()。我会看看这有多好。谢谢