【发布时间】:2015-11-12 23:19:18
【问题描述】:
问题:“方法 'Skip' 仅支持 LINQ to Entities 中的排序输入。方法 'OrderBy' 必须在方法 'Skip' 之前调用。”
list2 = list1.Where(a).OrderBy(x => x.Something).Union(list1.Where(x).OrderBy(x => x.SomethingDifferent));
return list2.ToPagedList(...);
我认为发生这种情况是因为它需要在“Union”之后有一个新的“OrderBy”。有没有什么办法可以把它变成一个 OrderedList,同时保持来自 Union 的当前订单?
有没有办法添加另一个 OrderBy,它实际上不会改变订单,例如:
list2 = list1.Where(a).OrderBy(x => x.Something).Union(list1.Where(x).OrderBy(x => x.SomethingDifferent)).OrderBy(x => x.NothingThatWillAffectTheOrder);
编辑
为了更清楚地说明这一点,我将用一个实际的例子来解释。
假设用户在电影数据库中搜索,并且您想在包含搜索字符串的演员姓名之前显示包含搜索字符串的标题。
list = movies.Where(x => x.Title.Contain...).Union(movies.Where(x => x.Actors.Contain..)
PagedList 不会接受这个,因为它没有排序,但是排序这个列表会违背联盟的目的。在保持当前顺序的同时,是否有一种“变通方法”来使其成为有序列表?
【问题讨论】:
-
我删除了我之前的答案,因为我没有完全理解你的问题。在使用来自github.com/TroyGoode/PagedList 的 PagedList 时,我没有遇到关于“跳过”方法的任何问题。你用的是那个吗?
-
是的,这就是我正在使用的。问题是因为两个 OrderBys 发生在 Union 之前,所以 PagedList 不会接受它。我将编辑我的问题以提供更好的示例。
-
我不明白您为什么会收到该错误,但我添加了一个具有完整功能实现的新答案。