0

外部キー関係のテーブルの簡単なテーブルの例を次に示します。

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));

特定の式に従ってFoos関連するものを少なくとも 1 つ含むすべてを返します。BarBars

次のようなマニュアルを書くことができます。

var query = context.Foos.Join(context.Bar
                    .Where(bar => bar.BarNumber == 42),
                    foo => foo.FooId,
                    bar => bar.FooId,
                    (foos, bars) => {
                        // What here?
                    });

それが正しいアプローチかどうか、および/または結果セレクターを処理して同等の結果またはSQLクエリを取得する方法かどうかはわかりません。

4

1 に答える 1

0

単純にクエリを逆にして、条件が Bars になるようにします。

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));
于 2013-10-11T12:47:44.267 に答える