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);

当我尝试将 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 一起使用?

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 回答