这句简单linq语句,在ef里面没法执行.
var manager = CreateManager<IUserLevelManager>();
var result =
manager.GetAll()
.OrderBy(a => a.PointRequired)
.TakeWhile(a => a.PointRequired < 1300).LastOrDefault();
需求大家应该可以猜到,有500,1000,1500,2000若干等级,取得1300所在的1000等级
GetAll返回的是 IQueryable<T> 所以TakeWhile也是在数据库里面执行的,然后就会报错,
LINQ to Entities 不识别方法“XXX.Entities.EF6.UserLevel LastOrDefault[UserLevel](System.Linq.IQueryable`1[XXX.Entities.EF6.UserLevel])”,因此该方法无法转换为存储表达式。
现在我是 manager.GetAll().ToList(),先全部取出来,然后在内存中使用linq to object语句可以得到结果,但是感觉这样不太好,造成了多余的网络io,而且ef框架设计的时候应该需要考虑这种情况的吧,
最近才接触ef,对这一块还不是很熟,请大神指教.
@caozhy @q107770540
顺便还有个问题,在数据库PointRequired字段(int)有索引的情况下
manager.GetAll().ToList() .OrderBy(a => a.PointRequired)
和 manager.GetAll() .OrderBy(a => a.PointRequired).ToList()
哪种效率高?
...全文


LINQ
