如何将实例方法作为委托传递

时间:2012-09-20 07:32:19

标签: c# linq entity-framework lambda

我使用 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);

当我尝试将RetryGetWithExpression转换为接受SP时,我遇到了一个问题,即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配合使用?

2 个答案:

答案 0 :(得分:1)

尝试

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

public static TValue RetryGetWithExpression<TValue>(Func<Entities, TValue> func)
{
    return func(entitiesContext);
}

答案 1 :(得分: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);

但是,它看起来毫无意义,因为您要做的就是传递一个函数委托并调用它。