Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将实例方法作为委托传递_C#_Linq_Entity Framework_Lambda - Fatal编程技术网

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

C# 如何将实例方法作为委托传递,c#,linq,entity-framework,lambda,C#,Linq,Entity Framework,Lambda,我有这个方法,我用EF RetryGetWithExpression(u=>u.Take(10.ToList()); 公共静态TValue RetryGetWithExpression( Func Func) T:在哪里上课 { var entitySet=entitiesContext.CreateObjectSet(); 返回函数(entitySet); } 上面的代码与EF生成的表实体一起工作。我试图做的是更改代码,使其与存储过程一起工作 这是执行SP的代码: Entities G=新实

我有这个方法,我用EF

RetryGetWithExpression(u=>u.Take(10.ToList());
公共静态TValue RetryGetWithExpression(
Func Func)
T:在哪里上课
{
var entitySet=entitiesContext.CreateObjectSet();
返回函数(entitySet);
}
上面的代码与EF生成的表实体一起工作。我试图做的是更改代码,使其与存储过程一起工作

这是执行SP的代码:

Entities G=新实体();
ObjectResult F=G.retrieveMedia(1);
当我尝试将RetryGetWithExpression转换为接受SPs时,遇到一个问题,即retrieveMedia是实例方法,无法将其作为u.retrieveMedia传递(1)

RetryGetWithExpression(
u=>u.retrieveMedia(1));
公共静态TValue RetryGetWithExpression(
Func Func)
T:在哪里上课
{
}
如何更改上述代码以使其与SPs配合使用?

请尝试

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

public static TValue RetryGetWithExpression<TValue>(Func<Entities, TValue> func)
{
    return func(entitiesContext);
}
RetryGetWithExpression(u=>u.retrieveMedia(1));
公共静态TValue RetryGetWithExpression(Func Func)
{
返回函数(entitiesContext);
}
诸如此类

public static TValue RetryGetWithExpression<TParam, TValue>(
        Func<TParam, TValue> func,
        TParam parameter)
{
    return func(parameter);
}
公共静态TValue RetryGetWithExpression(
Func Func,
t随机存储器参数)
{
返回func(参数);
}
你会称之为

Entities g = new Entities();
ObjectResult<retrieveMedia_Result> f = 
    RetryGetWithExpression<int?, ObjectResult<retrieveMedia_Result>>(
        g.retrieveMedia,
        1);
Entities g=新实体();
ObjectResult f=
RetryGetWithExpression(
g、 检索媒体,
1);

但是,这似乎毫无意义,因为您只需要传递一个函数委托并调用它。

很抱歉,这是错误的。retrieveMedia与retrieveMedia_Result不相关。@user1662812
retrieveMedia
的返回类型是什么?@user1662812然后使用
RetryGetWithExpression(u=>u.retrieveMedia(1))
insteadThis未编译且在Func上失败此未编译,因为它在以下行失败:g.retrieveMedia,出现错误:无法从用法推断方法“RetryGetWithExpression(System.Func,TParam)”的类型参数。尝试显式指定类型参数。好的,我将为您显式指定它们。我假设retrieveMedia接受
int
。我在同一行g.retrieveMedia上仍然收到错误:“retrieveMedia(int?)的无重载匹配委托”系统。Func“好的,这是因为我关于
int
的假设是不正确的,正如消息明确指出的那样。因此,您需要在函数签名中为委托传递额外的参数。
RetryGetWithExpression<ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(1));

public static TValue RetryGetWithExpression<TValue>(Func<Entities, TValue> func)
{
    return func(entitiesContext);
}
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);