gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:16 24 4
gpt4 key购买 nike

这是有问题的代码:

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 表达式必须具有可比较顺序的类型。

我需要确保它在底层正确地翻译了我的查询,因为可能有很多猫,所以我想确保它生成的 SQL 包含查询中的跳过/获取而不是获取所有猫然后在那个集合上做。

有什么想法吗?

最佳答案

您需要对项目进行排序,然后只需将存储它的变量键入为 IQueryable,而不是 IOrderedQueryable:

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

关于c# - 在 LINQ to Entities 中有 10 个不同的对象之前,我如何才能跳过并获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com