Я использую Dynamic Linq для запроса к нашей базе данных строки, которая создается на основе фильтров, которые вводит пользователь. В одном случае нам нужно выполнить объединение двух полей, чтобы применить наш фильтр к результату.
Результирующий синтаксис будет выглядеть примерно так:
(nullableField ?? requiredField) == "foo"
Или, если используется метод расширения:
(nullableField ?? requiredField).Contains("foo")
Dynamic Linq или, по крайней мере, версия, которая у нас сейчас есть в нашем проекте, не поддерживает объединение, есть ли какие-либо реализации или предложения относительно того, как я могу реализовать свою собственную? У меня мало опыта с выражениями, и я изо всех сил пытаюсь создать свой собственный. До сих пор следующий код работает на моем ограниченном тестировании, но я не уверен, правильно ли я это сделал.
Это вызывается ParseExpression ():
// ?? operator
Expression ParseCoalesce()
{
Expression left = ParseLogicalOr();
if (token.id == TokenId.DoubleQuestion)
{
NextToken();
Expression expr1 = ParseExpression();
left = Expression.Coalesce(left, expr1);
}
return left;
}
Мысли об этом коде? Есть ли лучший способ сделать это?