Вызовите выражение 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

Другие вопросы по тегам