Вызовите выражение linqkit в динамическом запросе linq
Как я могу назвать это выражение LinqKit
public static Expression<Func<Transaction, string>> ExpressionOfStatusName
{
get
{
Expression<Func<Transaction, string>> status =
(transaction) => transaction.TransactionStatus.Name;
return status;
}
}
в динамическом запросе linq (Linq в виде строки с использованием System.Linq.Dynamic от Microsoft)
Это выражение хорошо работает в стандартном запросе Linq, как это
Expression<Func<Transaction, string>> expressionOfStatusName = Transaction.ExpressionOfStatusName;
var ex = from transaction in context.Transaction.AsExpandable()
select expressionOfStatusName.Invoke(transaction)
Но когда я пытаюсь вызвать его из динамического запроса linq, я получаю сообщение об ошибке "Не существует подходящего метода Invoke" в типе "Выражение`1". Я пытался добавить импорт linqkit в файл System.Linq.Dynamic, но он все еще не работает.
Я хочу быть в состоянии сделать что-то подобное
var ex = context.Transaction.AsExpandable()
.Select (transaction=>transaction)
.Select("new { test = expressionOfStatusName.Invoke(transaction)");
Спасибо за помощь
1 ответ
Linq ожидает выражения func. Вы можете использовать расширение MS Linq.Dynamic, которое принимает строки и преобразует их в дерево выражений. Или вы можете использовать любой инструмент для построения дерева выражений. Однако динамическое расширение linq MS анализирует ограниченный набор входных данных String. Пример документа / блога. Вы просите, чтобы он проанализировал expressionOfStatusName.Invoke(транзакция). "Я не думаю, что это можно сделать. Вы можете отладить исходный код для проверки. Но я вспоминаю, что видел простой анализ членства там. Источник здесь
Кроме того, я думаю, что вы раздвигаете пределы допустимого ввода анонимного типа, как только вы пройдете проверку разбора. анонимные типы и Linq