C# 实体框架5执行完整表扫描

C# 实体框架5执行完整表扫描,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我有以下代码: public List<anEntity> Get(int page, int pagesize, Func<anEntity, IComparable> orderby) { using (var ctx = new MyContext()) { return ctx.anEntity.OrderBy(orderby).Skip(pagesize * page).Ta

我有以下代码:

public List<anEntity> Get(int page, int pagesize, Func<anEntity, IComparable> orderby)
{            
    using (var ctx = new MyContext())
    {                
        return ctx.anEntity.OrderBy(orderby).Skip(pagesize * page).Take(pagesize).ToList();                    
    }           
}
配置文件显示了一个漂亮的“TOP”子句


我希望避免使用很多方法,每个“orderby”可能使用一种方法。任何提示都将不胜感激。

这是因为您的
orderby
参数是一个函数而不是表达式。无法将任意函数转换为SQL,因此在调用该函数之前,所有数据都必须位于客户端

将参数类型更改为
Expression
,其中
T
是一个新的通用参数,应添加到
Get
方法中,它将按预期工作


当然,您不能使用自定义的
I可比较的
,但是没有办法解决这个问题:自定义代码无法转换为SQL。

您确认过“order by”字段在这两种情况下都是相同的吗?我想您的
orderby
参数应该是
Func
。好的,这个表达式就像“Where”的champ一样有效小条款。返回ctx.anEntity.Where(谓词).OrderBy(x=>x.aField).Skip(pagesize*page).Take(pagesize).ToList();其中谓词是表达式。有没有机会对订货人也这样做?谢谢tonI尝试过表达和作品。谢谢你的帮助。现在看起来像是返回ctx.anEntity.Where(谓词).OrderBy(OrderBy).Skip(pagesize*page).Take(pagesize.ToList();我真的很喜欢在干的时候不伤害db@乔迪:啊,对了,对不起,把它和
Where
方法搞混了
OrderBy
的参数不能只是
bool
,它在返回类型中应该是多态的。我已经更正了答案,看一看。@Jordi:你不必把自己限制在
I可比较的
,让它成为泛型。谢谢。我今天学到了很多。我是EF的新手,我想把事情做好。
return ctx.anEntity.OrderBy(x => x.aField).Skip(pagesize * page).Take(pagesize).ToList();