0

私はEFで使用するこの方法を持っています

RetryGetWithExpression<city, List<city>>(u => u.Take(10).ToList());

public static TValue RetryGetWithExpression<T, TValue>(
        Func<ObjectSet<T>, TValue> func)
    where T : class
{
    var entitySet = entitiesContext.CreateObjectSet<T>();
    return func(entitySet);
}

上記のコードは、EF によって生成されたテーブル エンティティで動作します。私がやろうとしているのは、ストアド プロシージャで動作するようにコードを変更することです。

これはSP を実行するコードです:

Entities G = new Entities();
ObjectResult<retrieveMedia_Result> F = G.retrieveMedia(1);

SP を受け入れるように RetryGetWithExpression を変換しようとすると、retrieveMedia がインスタンス メソッドであり、u.retrieveMedia(1) として渡すことができないという問題が発生します。

RetryGetWithExpression<Entities, ObjectResult<retrieveMedia_Result>>(
    u => u.retrieveMedia(1));

public static TValue RetryGetWithExpression<T, TValue>(
        Func<ObjectSet<T>, TValue> func)
    where T : class
{

}

SPで動作するように上記のコードを変更するにはどうすればよいですか?

4

2 に答える 2

1

試す

RetryGetWithExpression<ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(1));

public static TValue RetryGetWithExpression<TValue>(Func<Entities, TValue> func)
{
    return func(entitiesContext);
}
于 2012-09-20T07:51:36.540 に答える
1

のようなもの、

public static TValue RetryGetWithExpression<TParam, TValue>(
        Func<TParam, TValue> func,
        TParam parameter)
{
    return func(parameter);
}

あなたがどのように呼ぶか、

Entities g = new Entities();
ObjectResult<retrieveMedia_Result> f = 
    RetryGetWithExpression<int?, ObjectResult<retrieveMedia_Result>>(
        g.retrieveMedia,
        1);

ただし、関数デリゲートを渡して呼び出すだけなので、かなり無意味に思えます。

于 2012-09-20T08:00:32.777 に答える