Как можно динамически создавать выражение запроса LINQ, используя синтаксис запроса? - PullRequest
0 голосов
/ 04 июля 2019

Каковы возможные способы динамического создания выражения 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 голосов
/ 04 июля 2019

Спасибо всем за ваши комментарии. Так что оказывается, что это невозможно сделать, потому что синтаксис запроса - это просто синтаксический сахар языка C #.

Кроме того, если кто-то еще наткнется на этот вопрос, взгляните на отличный ответ @Gert: https://stackoverflow.com/a/15599143/828023

Этот ответ объясняет, что синтаксис запроса - «сахар», в то время как синтаксис метода показывает, что на самом деле происходит под капотом, где, например, join x in y on z equals x.something into somethingElse на самом деле является вызовом GroupJoin метода, и нет способа выразить это с деревьями выражений без фактического вызова GroupJoin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...