Mam tabelę z jednym do wielu mapowania do tabeli, która ma wiele do wielu mapowania do innej tabeli. Chciałbym wykonać następujące czynności:linq do encji, gdzie gdzie klauzula? (wewnętrzne gdzie)
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"));
Jak mogę to osiągnąć? Pierwsza część będzie działać, ale gdy spróbujemy bez "wewnętrznego WHERE", nie będę mógł uzyskać dostępu do właściwości many_to_many_table, ale "wewnętrzne miejsce" oczywiście nie będzie się kompilować. Zasadniczo chcę, aby osiągnąć coś podobnego następującej kwerendy 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'
To pozornie proste, ale nie mogę znaleźć sposób, aby go osiągnąć w jednej linii LINQ - za pomocą wielu linii, aby osiągnąć pożądany efekt zwraca zbyt wiele wyników, a ja muszę je przeglądać. Próbowałem również rzeczy jak:
var results = main_link_tbl.Include("some_table.many_to_many_table")
.Where(l => l.some_table.many_to_many_table.<property>
== "MyValue")
Ale w tym momencie nie mogę wybrać właściwość many_to_many_table chyba dodać FirstOrDefault(), która niweluje efekt, ponieważ nie będzie przeglądać wszystkie rekordy.
Co nie działa, ale wymaga wielu linii kodu iw tle zwróci zbyt wiele wyników w zapytaniu SQL zbudowany przez ramy LINQ-podmioty:
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");
}
Ten fragment kodu zwróci wszystko wiersze wewnątrz some_table, które pasują do pierwszego warunku Where, a następnie stosują następny warunek Where, podczas gdy ja oczywiście potrzebuję tylko jednego wiersza, gdzie multi_to_many_table.RandomProperty jest równe myValue.
działa jak czar. – L2Eer
bardzo piękne. – qakmak