以下linq调用in linq to sql导致1个SQL查询到数据库
Table1.Select(t => new {Table2.First().Property1})
但我似乎无法将Dynamic Linq变为相同,下面会产生2个单独的查询。
Table1.Select("new(@0.Property1)", Table2.First())
这不起作用
Table1.Select("@0", Table2.First().Property1)
或者
Table1.Select("new(@0 as MyField)", Table2.First().Property1)
我错过了什么?
答案 0 :(得分:0)
它生成两个单独的查询,因为在该上下文中,Table2.First()
是与查询其余部分的单独调用。它没有集成到生成的表达式中。好像你这样做了:
var first = Table2.First(); // evaluated eagerly due to the First() call
var query = Table1.Select("new(@0.Property1)", first);
如果您使用第二个表格对笛卡尔积进行重写,则可以获得所需的结果。
var query = Table1.SelectMany(t1 =>
Table2.Take(1).Select(t2 => new { t1, t2 })
)
.Select("new(t2.Property1 as MyField)");
答案 1 :(得分:0)
感谢Jeff的见解,正确的查询安排应该是
Table1.Select(t => new {t2 = Table2.First()}).Select("new(t2.Property1)")
生成对DB的单个查询调用