如何跳过和获取对象,直到在LINQ to Entity中有10个不同的对象

本文关键字:中有 Entity to 10个 对象 LINQ 获取 何跳过 取对象 | 更新日期: 2023-09-27 18:26:05

这是有问题的代码:

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和take。

以上内容不起作用,因为必须使用OrderBy进行订购。

如果我把OrderBy放在distinct之后,我就不能执行Skip和Take,因为结果是IOrderedQueryable,而不是IQueryable(编译器错误)。

如果我以前做过,错误显示DbSortClause expressions must have a type that is order comparable.

我需要确保它在后台正确地翻译了我的查询,因为可能有很多cat,所以我想确保它生成的SQL在查询中包含skip/take,而不是获取所有cat,然后在该集合上执行。

有什么想法吗?

如何跳过和获取对象,直到在LINQ to Entity中有10个不同的对象

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

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