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

What are the ways to create the LINQ query expression using query syntax dynamically?

有哪些可能的方法可以动态创建 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"

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

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

此外,如果其他人偶然发现了这个问题,请查看@Gert 的出色回答:

该答案解释了查询语法是 "sugar",而方法语法显示了幕后真正发生的事情,例如 join x in y on z equals x.something into somethingElse 实际上是 GroupJoin 方法调用如果不实际调用 GroupJoin,就无法用表达式树来表达这一点。