我刚刚发现了 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)
...
这不支持,还是我做错了什么?