如何调用此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)");
感谢您的帮助
答案 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