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