Dynamic Linq 创建多个查询

Dynamic Linq creates multiple queries

在普通 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)

我错过了什么?

它生成两个单独的查询,因为在该上下文中,Table2.First() 是与查询的其余部分分开的调用。它没有集成到生成的表达式中。就好像你这样做了:

var first = Table2.First(); // evaluated eagerly due to the First() call
var query = Table1.Select("new(@0.Property1)", first);

如果用第二个 table.

的笛卡尔积重写它,您可以获得预期的结果
var query = Table1.SelectMany(t1 =>
        Table2.Take(1).Select(t2 => new { t1, t2 })
    )
    .Select("new(t2.Property1 as MyField)");

感谢 Jeff 的见解,正确的查询安排应该是

Table1.Select(t => new {t2 = Table2.First()}).Select("new(t2.Property1)")

它产生对数据库的单个查询调用