在动态linq查询中调用linqkit表达式

时间:2013-07-30 12:03:58

标签: c# linq entity-framework dynamic-linq linqkit

如何调用此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'类型中 我试图在文件System.Linq.Dynamic中添加linqkit导入,但它仍然无法正常工作。

我希望能够做那样的事情

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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

Linq期待func的表达。您可以使用MS Linq.Dynamic扩展,它接受字符串并将它们转换为表达式树。或者,您可以使用任何您喜欢的工具来构建表达式树。然而,MS动态linq扩展解析一组有限的String输入。 Some sample docu/blog 你要求它解析expressionOfStatusName.Invoke(transaction)“ 我不认为它可以做到这一点。您可以调试源以进行检查。 但我记得在那里看到简单的成员资格分析。 The source is here

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