gpt4 book ai didi

c# - 如何扩展谓词以外的调用表达式?

转载 作者:行者123 更新时间:2023-11-30 22:09:55 24 4
gpt4 key购买 nike

我刚刚发现了 LINQKit,我很高兴它似乎为想要分解复杂 linq 查询的部分这一常见问题提供了解决方案。

然而,所有示例都展示了如何分解出 where 从句的谓词

尽管这是一个非常典型的用例,但我还想分解出其他类型的表达式,通常用于选择。假设我有以下子表达式:

    Expression<Func<SomeFunkyEntity, String>> GetStatusFromSomeFunkyEntity()
{
return i =>
i.IsExercise ? "Excercise" :
i.IsExpired ? "Expired" :
(i.IsLocked ) ? "Locked" :
i.IsAdmitted ? "Admissible" : "Unusable";
}

LINQKit 是否提供了一种方法来扩展对此的调用?我试过:

var query =
from i in this.DbContext.MyFunkyEntities.AsExpandable()
select new SomeFunkyEntityWithStatus()
{
FunkyEntity = i,
Status = GetStatusFromSomeFunkyEntity().Invoke(i)
};

这符合要求,但在 LINQKit 的扩展器中运行时失败:

Unable to cast object of type 'System.Linq.Expressions.InstanceMethodCallExpressionN' to type 'System.Linq.Expressions.LambdaExpression'.

堆栈跟踪开始于:

at LinqKit.ExpressionExpander.VisitMethodCall(MethodCallExpression m)
at LinqKit.ExpressionVisitor.Visit(Expression exp)
at LinqKit.ExpressionVisitor.VisitMemberAssignment(MemberAssignment assignment)
...

这是不支持,还是我做错了什么?

最佳答案

您是否尝试过在调用 invoke 之前将表达式分配给局部变量?

var statusFromSomeFunkyEntity = GetStatusFromSomeFunkyEntity();

var query =
from i in this.DbContext.MyFunkyEntities.AsExpandable()
select new SomeFunkyEntityWithStatus()
{
FunkyEntity = i,
Status = statusFromSomeFunkyEntity.Invoke(i)
};

查看 this answer .

关于c# - 如何扩展谓词以外的调用表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com