C# 如何使用IQuerable。在我自己的课堂上选择
我试图在我自己的泛型类中封装一个IQuerable,然后通过我自己的Select()方法对此执行Select(),但我无法让它工作 我有:(还没有真正的工作代码)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(选
公共类页面查询
{
私有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);
}