2

私は 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)
...

これはサポートされていませんか、それとも何か間違っていますか?

4

1 に答える 1