但使用查询语法可以动态创建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"
我喜欢表达式树如何在动态创建表达式时确保类型安全,但是如何使用查询语法创建表达式?
答案 0 :(得分:0)
感谢大家的评论。 事实证明,这样做是不可能的,因为查询语法只是C#语言的语法糖。
另外,如果有人偶然发现了这个问题,请查看@Gert的出色回答:https://stackoverflow.com/a/15599143/828023
该答案说明查询语法是“糖”,而方法语法显示了实际情况,例如,join x in y on z equals x.something into somethingElse
实际上是GroupJoin
方法调用,没有无需实际调用GroupJoin
的表达树表达方式。