1

我如何称呼这个 LinqKit 表达式

    public static Expression<Func<Transaction, string>> ExpressionOfStatusName
    {
        get
        {
            Expression<Func<Transaction, string>> status =
                (transaction) =>  transaction.TransactionStatus.Name;
            return status;
        }
    }

在动态 linq 查询中(使用 Microsoft 的 System.Linq.Dynamic 作为字符串的 Linq)

此表达式在像这样的标准 Linq 查询中运行良好

Expression<Func<Transaction, string>> expressionOfStatusName = Transaction.ExpressionOfStatusName;

var ex = from transaction in context.Transaction.AsExpandable()
         select expressionOfStatusName.Invoke(transaction)

但是当我尝试从动态 linq 查询中调用它时,我收到一条错误消息“'Expression`1' 类型中不存在适用的方法 'Invoke' 我试图在文件 System.Linq.Dynamic 中添加 linqkit 导入,但它仍然无法正常工作。

我希望能够做这样的事情

var ex = context.Transaction.AsExpandable()
.Select (transaction=>transaction)
.Select("new { test = expressionOfStatusName.Invoke(transaction)");

谢谢您的帮助

4

1 回答 1

0

Linq 期望 func 的表达式。您可以使用 MS Linq.Dynamic 扩展,它接受字符串并将它们转换为表达式树。或者您可以使用任何您喜欢的工具来构建表达式树。然而,MS 动态 linq 扩展解析一组有限的字符串输入。 一些示例文档/博客 您要求它解析 expressionOfStatusName.Invoke(transaction)" 我不认为它可以做到这一点。您可以调试源代码进行检查。但我记得在那里看到简单的成员分析。 源代码在这里

此外,一旦您通过了解析挑战,我认为您正在推动可接受的匿名类型输入的限制。 匿名类型和 Linq

于 2013-07-30T13:55:04.073 回答