我有一个表与一对多映射到一个表,有多对多映射到另一个表。我想要做以下事情: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