Dynamic Linq创建多个查询

时间:2016-05-22 03:34:39

标签: c# linq dynamic-linq

以下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)

我错过了什么?

2 个答案:

答案 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的单个查询调用