我有一個表與一對多映射到一個表,有多對多映射到另一個表。我想要做以下事情:linq to entities,where where where clause? (內部在哪裏)
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的一個單行 - 使用多行來達到預期的效果返回太很多結果,我最終不得不通過它們循環。我也嘗試這樣的東西:
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");
}
這段代碼將返回所有some_table中的行匹配第一個Where條件,然後應用下一個Where條件,而顯然只需要一行,其中many_to_many_table.RandomProperty等於myValue。
就像一個魅力。 – L2Eer
很漂亮。 – qakmak