【发布时间】:2016-11-15 15:09:13
【问题描述】:
我希望能够使用 lambda 表达式获得 OrderBy 查询,以便获得带有 TOP(n) 关键字的 SQL 查询(大幅提升性能)。
如果我指定的话,我可以做到这一点......
PaginatedList = query.OrderBy(x => x.QuoteID).Skip(() => skipValue).Take(() => pageSize)
但是因为我希望 orderBy 字段通过 UI 选择一个名称来动态变化,所以我想做这样的事情:
var propertyInfo = typeof(Data.Quote).GetProperty(sortName);
Expression<Func<Data.Quote, object>> orderField = x => propertyInfo.GetValue(x, null);
PaginatedList = query.OrderBy(orderField).Skip(() => skipValue).Take(() => pageSize)
这给了我错误:
"LINQ to Entities 无法识别方法 'System.Object GetValue(System.Object)' 方法,该方法不能翻译 到商店表达式中。”
我试过这个不是Expression<Func<T, object>>的类型
var propertyInfo = typeof(Data.Quote).GetProperty(sortName);
Func<Data.Quote, object> orderField = x => propertyInfo.GetValue(x, null);
PaginatedList = query.OrderBy(x => orderField).Skip(() => skipValue).Take(() => pageSize)
我得到这个错误:
“无法创建类型 [...] 的常量值。只有原始类型 或在此上下文中支持枚举类型"
我确信有办法实现这一点,但目前不确定如何。
【问题讨论】:
-
感谢所有建议,我找到的最佳解决方案是:stackoverflow.com/questions/41244/…
-
必须感谢那些发现重复问题的人,这正是我所需要的,非常感谢!找这个很久了
标签: c# .net entity-framework linq linq-to-sql