私は、1対多数のマッピングを持つテーブルを、別のテーブルへの多対多マッピングを持つテーブルに持っています。次のようにしたいと思います:エンティティへのlinq、where where節? (inner where)
var results = context.main_link_table
.Where(l => l.some_table.RandomProperty == "myValue" &&
l.some_table.many_to_many_table
.Where(m => m.RandomProperty == "myValue"));
どうすればいいですか?最初の部分はうまくいきますが、 '内側のWHERE'がなければ、many_to_many_tableのプロパティにアクセスすることはできませんが、内部の場所は明らかにコンパイルされません。私は基本的に次のSQLクエリのような何かを達成したい:
SELECT * from main_link_table
INNER JOIN some_table AS t1 ON t1.association = main_link_table.association
INNER JOIN many_to_many_table AS t2 ON t2.association = some_table.association
WHERE t1.RandomProperty = 'MyValue' AND t2.RandomProperty = 'MyValue'
それは一見シンプルですが、私は、LINQの1つの行でそれを達成するための方法を見つけることができません - 所望の効果を達成するために複数行を使用すると、あまりにも返します多くの結果と私はそれらをループする必要があります。私はまた、のようなものを試してみました:
var results = main_link_tbl.Include("some_table.many_to_many_table")
.Where(l => l.some_table.many_to_many_table.<property>
== "MyValue")
しかし、私はそれがすべてのレコードを検索しませんので、効果を無効FirstOrDefault()を、追加しない限り、この時点で私はmany_to_many_tableのプロパティを選択することはできません。
仕事をした何が、コードの複数行を必要とし、バックグラウンドでLINQツーエンティティフレームワークによって構築されたSQLクエリであまりにも多くの結果を返します。
var results = db.main_link_table.Include("some_table")
.Include("some_table.many_to_many_table")
.Where(s => s.some_table.RandomProperty
== "myValue")
.Select(s => s.some_table);
foreach(var result in results) {
var match_data = result.Where(s => s.many_to_many_table.RandomProperty
== "myValue");
}
コードのこの作品は、すべて返されます最初のWhere条件に一致し、次にWhere条件を適用するsome_table内の行。ただし、many_to_many_table.RandomPropertyがmyValueと等しい行が1つだけ必要です。
作品。 – L2Eer
非常に美しいです。 – qakmak