1

EF式をメソッドパラメータとして渡すにはどうすればよいですか?

私の質問を説明するために、擬似コードの例を作成しました。

最初の例は、今日の私の方法です。この例では、EFとファンシーリトライロジックを利用しています。私がする必要があるのは、Fancy Retry Logicをカプセル化して、より一般的になり、重複しないようにすることです。

2番目の例は、EF式をパラメーターとして受け入れるヘルパーメソッドを使用して、どのようにしたいかを示しています。

これはSQLで行うのは簡単なことですが、強く型付けされたオブジェクトの恩恵を受けることができるように、EFでそれを行いたいと思います。

最初の例:

public static User GetUser(String userEmail)
{
    using (MyEntities dataModel = new MyEntities ())
    {
        var query =  FancyRetryLogic(() =>
        {
            (dataModel.Users.FirstOrDefault<User>(x => x.UserEmail == userEmail)));
        });

        return query;
    }
}

2番目の例:

T RetryHelper<T>(Expression<Func<T, TValue>> expression)
{
    using (MyEntities dataModel = new (MyEntities ())
    {

        var query = FancyRetryLogic(() =>
                    {
                        return dataModel.expression
                    });
    }
}

public User GetUser(String userEmail)
{
    return RetryHelper<User>(<User>.FirstOrDefault<User>(x => x.UserEmail == userEmail))
}
4

2 に答える 2

2

多分このようなもの?

public TValue RetryHelper<T, TValue>(Func<ObjectSet<T>, TValue> func)
    where T : class
{
    using (MyEntities dataModel = new MyEntities())
    {
        var entitySet = dataModel.CreateObjectSet<T>();
        return FancyRetryLogic(() =>
               {
                   return func(entitySet);
               });
    }
}

public User GetUser(String userEmail)
{
    return RetryHelper<User, User>(u => u.FirstOrDefault(x => x.UserEmail == userEmail));
}
于 2012-04-07T23:50:18.623 に答える
1

すでに話し合ったことを投稿するだけです...

ここにあなたを助けるかもしれないリンクがあります、私はそれがあなたが必要とするものに似た何かを持っていると思います。

LinqToObjectsおよびLinqToSQLでAsQueryableを使用する

IQueryableオブジェクトをキャッシュするにはどうすればよいですか?

私はより良い例を見てきましたが、それらは便利ではありません。基本的には、それを使用してクエリをフォームに保持し、すべてが完了したことがわかった最後の瞬間までさらにフィルタリング、変更できるようにすることができます。クエリを実際に実現して列挙できます。

それが役に立てば幸い

于 2012-04-07T23:25:56.860 に答える