以下以普通linq对sql的linq调用会导致对数据库的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)
我想念什么?
由于Jeff的见解,正确的查询安排应为
Table1.Select(t => new {t2 = Table2.First()}).Select("new(t2.Property1)")
生成对数据库的单个查询调用
它生成两个单独的查询,因为在这种情况下, 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)");