如何在LINQ to Entities中有10个不同的对象之前,我如何跳过并获取对象?

时间:2014-10-08 15:10:03

标签: c# linq-to-entities

这是有问题的代码:

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而不是获取所有猫然后在那个系列上做这件事。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您需要订购商品,但只需输入您存储的变量IQueryable,而不是IOrderedQueryable

var distinctCatNames = allCats.Select(c => c.CatName)
    .Distinct()
    .OrderBy(name => name)
    .AsQueryable();