这是有问题的代码:
var distinctCatNames = allCats.Select(c => c.CatName).Distinct();
if (skip.HasValue) distinctCatNames = distinctCatNames .Skip(skip.Value);
if (take.HasValue) distinctCatNames = distinctCatNames .Take(take.Value);
var distinctCatNameList= distinctCatNames .ToList();
如果你想象我有100只猫的清单,我想选择10个不同的名字。它将进入分页列表,因此必须使用skip and take。
以上操作无效,因为必须与OrderBy一起订购。
如果我把OrderBy放在distinct之后,我就不能做Skip and Take,因为结果是IOrderedQueryable,而不是IQueryable(编译器错误)。
如果我之前执行此操作,错误会显示DbSortClause expressions must have a type that is order comparable.
我需要确保在引擎盖下它正确地翻译我的查询,因为可能有很多猫所以我想确保它生成包含查询中的skip / take的SQL而不是获取所有猫然后在那个系列上做这件事。
有什么想法吗?
答案 0 :(得分:4)
您需要订购商品,但只需输入您存储的变量IQueryable
,而不是IOrderedQueryable
:
var distinctCatNames = allCats.Select(c => c.CatName)
.Distinct()
.OrderBy(name => name)
.AsQueryable();