Итак, у меня есть расширение IQueryable, которое делает немного больше, чем этот блок кода. По сути, я объединяю кучу строк, а потом делаю на них содержимое. Проблема, с которой я сталкиваюсь, заключается в том, что Entity Framework Core не поддерживает System.String.Concat и выполняет эту часть запроса локально, что, безусловно, не то, что я хочу.
Вот маленький l oop, который я использовал для добавления этих разных строк:
List<Expression> stringExpressionsToConcat = new List<Expression>();
foreach (var member in memberExpressions)
{
stringExpressionsToConcat.Add(member);
stringExpressionsToConcat.Add(spaceConstant);
}
//call the concat to create the final term to search on
NewArrayExpression arrayExpression = Expression.NewArrayInit(typeof(string), stringExpressionsToConcat);
searchStringExpression = Expression.Call(concatMethod, arrayExpression);
Это рабочая сторона клиента, но не будет скомпилирована для Entity в SQL. У меня была такая же проблема в предложении Order By, где я делал что-то вроде этого:
.ThenByDescending(e => string.Concat(e.FirstName, " ", e.LastName))
Это, очевидно, также не переводило Entity в SQL, так как это именно то, что я строю в своем дерево выражений. Однако, изменив его на это ....
.ThenByDescending(e => e.FirstName + " " + e.LastName)
Преобразуется в сущность в SQL. Поэтому мне интересно, как я могу создать такое же выражение, представленное в приведенном выше коде, которое правильно отправляется на SQL. Я пытался использовать Expression.Add, но add не поддерживается для строковых типов в построителе выражений. Возможно ли это, или в Entity Framework есть дополнительный код, который делает это возможным? Я пытался изучить исходный код на GitHub, но немного сложно найти, где именно это происходит.