Entity Frameworkでこれを行うにはどうすればよいですか(複数の場所に結合または結合)。

c# entity-framework linq linq-to-entities

質問

互いに関係のある2つのテーブルがあります

テーブルAはテーブルBと1対多の関係を持っているので、それぞれにナビゲーションプロパティを作成します。

今度はテーブルA(userName)の値をチェックし、テーブルB(ClubId)の値をチェックする必要があります。

だから私の心の中でそれはのようなものになります

Join the tables together
Where A.userName == "bob" &&
where B.clubId == "Car"

// return the count.

しかし今、私はEntityのものでそれが結合をより少なく一般的にするべきであることを知っているので、私はそれが結合でそれをすることができるかどうか疑問に思う。

私はこれを試しました

int count = Entity.TableA.where(a => a.userName == "bob" && a.TableB.where(i => i.ClubId == "Car")).Count();

正しい型(2番目のwhere)が返されないので、これは機能しません。これこそまさに私たちが行おうとしていることがどのようにうまくいくと期待するかについて私が考えた方法です。

それで、それはどのように見えるべきですか?

PS

上記のように、Linqメソッドのクエリで実行する例があります。

受け入れられた回答

TableA前にTableAフィルタリングする方がおそらくより効率的です。

var clubs = from a in Entity.TableA
            where a.userName == "bob"
            from b in a.TableB
            where b.clubId == "Car"
            select b;

var count = clubs.Count();

2つの変数を使用する必要はありません。わかりやすくするために、ここでは私の好みに過ぎません。

あるいはメソッドの構文では、少し単純化することができます。

var count = Entity.TableA.Where(a => a.userName == "bob")
                         .SelectMany(a => a.TableB)
                         .Count(b => b.clubId == "Car");

しかし、私はEFがそれらの特定の表現を理解していることを確信していません。そうでなければ、コンパイラは上記のクエリを次のように翻訳します。

var count = Entity.TableA.Where(a => a.userName == "bob")
                         .SelectMany(a => a.TableB, (a,b) => new { a, b })
                         .Where(x => x.b.clubId == "Car")
                         .Count();

人気のある回答

あなたのEFモデルがユーザーとクラブの間に関係があると仮定すると、このようなことをすることができます:

var usersNamedBobInCarClub = 
             from A in User
             from B in A.Clubs
             where A.userName == "bob" &&
                   B.clubId == "Car"
             select A;

ユーザーとクラブの両方のリターン要素が必要な場合は、クエリ内の結合を確認してください。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ