2

これは解決するのが非常に簡単な問題であるはずですが、何らかの理由でEntityFrameworkは私にとって非常に困難です。単純な左結合を行う必要があります...

2つのテーブルがあります。たとえば、ユーザーテーブルは次のとおりです。

user_id | name | fk_group_id

そしてグループテーブル

group_id | groupname

生のSQLの場合:

SELECT * FROM users AS u
LEFT JOIN groups AS g
ON u.fk_group_id = g.group_id
WHERE groupname = 'my group'

SQLで非常に簡単です。しかし、これを行う方法についての答えを検索するとき、Entity Frameworkが、すぐに頭に浮かぶことが1つあります... WTF ...!?!?超大規模に構築された、奇妙な形式の「クエリ」が実行され、必要なものとそうでないものが本当に混乱しています...

だから私は誰かが私の特定の問題で私を助けてくれることを願っています。上記のSQLクエリを(LINQ?)EntityFrameworkでどのように書き直すのでしょうか。

現在私はこれを持っています:

var bla = (from m in myEnt.Users
          // My join attempt..
          join mp in myEnt.Groups on m equals mp.group_id into n
          where n.group_name == "something"
          select m);

これがうまくいったとしても、これが私の人生を楽にするためにどのように想定されているのか本当にわかりません。

とにかく、私は本当に誰かが私を助けてくれることを願っています:-)

4

2 に答える 2

4

なぜ参加する必要があるのですか?ユーザーとグループの関係はもうありませんか?

var bla = from m in myEnt.Users
           where m.Group.Groupname = "something"
           select m;

これはうまくいくはずですか、それとも私は間違っていますか?

于 2012-06-06T08:53:23.890 に答える
4

うーん、ORMで明示的に行う必要はありません。それがここでの落とし穴であり、それがマッピングの目的です。

あなたはただ行くことができます:

var blah = myEnt.Users.Where(user => user.Group.Name == "something");

または代替構文で

from usr in myEnt.Users
where usr.Group.Name == "something"
select usr`

オブジェクトにマッピングした後、それが多対1の関係である場合、すべてUserのエンティティは彼へのナビゲーションプロパティを 持ちGroup、すべてGroupUserコレクションを持ちます。次に、結果を適切にフィルタリングするだけです。

于 2012-06-06T08:53:26.853 に答える