动态使用查询语法创建LINQ查询表达式的方法有哪些?

时间:2019-07-04 12:04:59

标签: c# linq linq-to-entities

但使用查询语法可以动态创建LINQ表达式的可能方法是什么?查询语法仅是C#的东西吗?如果是,那是使用Roslyn动态编译创建此类表达式的唯一可行方法吗?

当手动编写LINQ表达式时,使用方法链接语法(例如ctx.Foo.Where(foo => foo.Type.Name == "Bar"))编写时,我发现它们更加自然,但是在某些情况下,我需要这样编写它们:

from foo in ctx.Foo
join fooType in ctx.Types on foo.TypeId equals fooType.Id
where fooType.Name == "Bar"

我喜欢表达式树如何在动态创建表达式时确保类型安全,但是如何使用查询语法创建表达式?

1 个答案:

答案 0 :(得分:0)

感谢大家的评论。 事实证明,这样做是不可能的,因为查询语法只是C#语言的语法糖。

另外,如果有人偶然发现了这个问题,请查看@Gert的出色回答:https://stackoverflow.com/a/15599143/828023

该答案说明查询语法是“糖”,而方法语法显示了实际情况,例如,join x in y on z equals x.something into somethingElse实际上是GroupJoin方法调用,没有无需实际调用GroupJoin的表达树表达方式。