4

これが私がやりたいことです:

class MyDbContext : DbContext 
{
    private static Expression<Func<MyClass, int>> myExpression1 = x => /* something complicated ... */;
    private static Expression<Func<Item, int>> myExpression2 = x => /* something else complicated ... */;

    public object GetAllData()
    {
        return (
            from o in MyClassDbSet.AsExpandable() 
            select new 
            {
                data1 = myExpression1.Invoke(o),                      // problem 1
                data2 = o.Items.Select(myExpression2.Compile())       // problem 2
            }
        );
    }
}

アップデート :

myExpression複数の LINQ クエリで再利用したいので、クエリから分離しておく必要があります。

更新 2:

と に分けmyExpressionmyExpression1myExpression2別々に再利用したいという事実を明確にします。

更新 3:

例に LINQkit を追加しました。

問題 1スロー: タイプ 'System.Linq.Expressions.FieldExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません。

問題 2スロー: 内部 .NET Framework データ プロバイダー エラー 1025。

4

2 に答える 2

0

式ではなくデリゲートのみを使用して試すことができます。

  private static Func<MyClass, int> myExpression = x => /* something complicated ... */;

このアプローチの問題は、式を計算するために必要なフィールドだけではなく、MyClass 全体がデータベースから取得されることです。

于 2013-07-16T20:39:18.230 に答える