Я нашел следующий вопрос, который может сочетать несколько выражений Expression
:
Как объединить два лямбда-выражения C #без вызова?
Мне интересно, как вы, используя подобную технику, объединяете.OrderBy Expression
с.Where Expression
в одно выражение типа или наследуете от типа System.Linq.Expressions.Expression
.
Я делаю очень урезанный класс стиля QueryProvider -для получения T => T ==...
Func через общедоступные методы .Where
и .OrderBy
. Это сделано для того, чтобы выражение, которое строит этот класс, передавалось в QueryTranslator для создания подходящего SQL.
QueryTranslator этого стиля при вызове из QueryProvider обычно принимает один System.Linq.Expressions.Expression
в качестве аргумента, который затем преобразуется в SQL.
Я могу выполнить и понять поставленный выше вопрос о слиянии двух .Where
Funcs. Следующий пост в блоге был особенно полезен для этого, и я проследил каждый из примеров :
http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
. Эта статья CodeProject также была полезна:
http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C
Однако при объединении.OrderBy Func с.Where Func они имеют разные общие аргументы. В случае.Where это Func
, а в случае.OrderBy это Func
.
Слияние этих двух выражений, на первый взгляд, не так просто, как слияние двух с одинаковыми общими аргументами.
Встроенная в -функция Func -Expression -, производящая -механизм (, не уверенный в точном термине ), может комбинировать.Where Func с.OrderBy Func. Мне любопытно, что происходит под капотом, когда эти два выражения сливаются в одно System.Linq.Expressions.Expression
. Является ли это возможным,и если да, то как бы вы объединили Expression
с Expression
, предполагая, что сущность имеет один и тот же тип в каждом выражении?