Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何使用IQuerable。在我自己的课堂上选择_C#_Entity Framework_Linq - Fatal编程技术网

C# 如何使用IQuerable。在我自己的课堂上选择

C# 如何使用IQuerable。在我自己的课堂上选择,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图在我自己的泛型类中封装一个IQuerable,然后通过我自己的Select()方法对此执行Select(),但我无法让它工作 我有:(还没有真正的工作代码) 公共类页面查询 { 私有IQueryable q=null; 公共页面查询(MyContext数据库) { q=DB.MyEntity.SqlQuery(“从MyTable中选择*).asqueryable(); } 公共IQueryable选择(表达式选择器) { 返回q.Select(选择器); } } 我在q.Select(选

我试图在我自己的泛型类中封装一个IQuerable,然后通过我自己的Select()方法对此执行Select(),但我无法让它工作

我有:(还没有真正的工作代码)

公共类页面查询
{
私有IQueryable q=null;
公共页面查询(MyContext数据库)
{
q=DB.MyEntity.SqlQuery(“从MyTable中选择*).asqueryable();
}
公共IQueryable选择(表达式选择器)
{
返回q.Select(选择器);
}
}
我在
q.Select(选择器)上出错

它将不接受该参数

我可以从某种程度上理解这个问题,但如果有可能的话,我无法掌握如何让它发挥作用

如有任何意见,将不胜感激

谢谢..

您将类定义为泛型,然后定义了一个泛型函数,该函数重新使用类型参数
T
,这会混淆编译程序。没有理由向函数中添加泛型参数,因此只需将其去掉:

public IQueryable<T> Select(Expression<Func<T, T>> selector)
{
    return  q.Select(selector);    
}
publicIQueryable选择(表达式选择器)
{
返回q.Select(选择器);
}

但为什么要包装Linq方法呢?为什么不让类实现
IQueryable
并使用Linq的实现呢?

IQueryable与IEnumerable或Linq一样是通用的,它与实体框架无关。事实上,它是为了封装可查询的提供者。为什么您认为您需要自己封装它,特别是因为您最终将使用相同的语法?返回相同类型的选择器有什么意义?你是在改变输入还是在输入集合的基础上创建新对象?哇,这确实起到了作用…:)我对这方面没什么经验generics@Beaker问题中的代码甚至不会编译,即使有了这个更改,所以显然它不能代表您的实际代码。@Servy您得到了什么错误?它在更改后为我编译。实际上,这是因为我想在执行查询后但在关闭上下文之前获得返回参数。将尝试IQuerable实现,但我不确定它是否能工作。@DStanley构造函数中的赋值无效,因为所赋值的类型不是
IQuerable
public IQueryable<T> Select(Expression<Func<T, T>> selector)
{
    return  q.Select(selector);    
}