2
我剛剛發現了LINQKit,並且很高興看到它似乎爲想要分解出複雜的linq查詢部分的常見問題提供了一個解決方案。如何擴展謂詞以外的調用表達式?
但是,所有示例都顯示瞭如何分解謂詞的where-clause。
雖然這是一個非常典型的用例,但我還想將其他類型的表達式(通常用於選擇)進行分解。假設我有以下子表達式:
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)
...
這是不支持的,還是我做的有問題?
是的!非常感謝!事實上,我記得曾經讀過的另一個問題是,但顯然沒有正確內化。 – John