给定一个父级和一个有效的列名,我想找到所有相关的子级,按动态列名排序。这是我认为我的代码的样子:
Parent. // EntityObject
Children. // EntityCollection
Where(c => c.Gender == 'm'). // IEnumerable
OrderBy(columnName, ListSortDirection.Ascending). // -- not available --
Skip(pages * pageSize).Take(pageSize);
IEnumerable.OrderBy(string columnName) 不存在。环顾四周以完成“按动态列名排序”,我从这个看起来很棒的解决方案开始:如何为运行时排序创建表达式树?,但这在 IQueryable 上运行
如果是这样,我认为它会将记录通过网络进行排序并降低我的寻呼机的性能。所以我重新排序:
Repository. // Repository
Children. // ObjectSet
Where(c => c.Parent == Parent && c.Gender == 'm'). // ObjectQuery, runtime error
OrderBy(columnName, ListSortDirection.Ascending). // IOrderedQueryable
Skip(pages * pageSize).Take(pageSize);
ObjectSet 和 ObjectQuery 实现 OrderBy(string columnName),并且此代码编译,但产生错误:
无法创建类型为“DataModel.Parent”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
当然,我可以获取父ID,但是Child.ParentReference也是非原始类型。
我可以想到几种方法可以通过网络加载整个记录集,但我觉得我一定遗漏了一些东西,因为使用所有 MS 将一组基本指令传递到数据库一定不难以技术为中心。
编辑:假装我是http://en.wikipedia.org/wiki/Quiverfull,需要给我的孩子分页。:) edit2:澄清了我需要查询动态列名。