gpt4 book ai didi

c# - 将 IQueryable 转换为 IOrderedQueryable

转载 作者:行者123 更新时间:2023-11-30 20:53:57 26 4
gpt4 key购买 nike

我有 2 个表:Items 和 ItemMetrics。 Items 包含我的项目,ItemMetrics 包含有关这些项目的统计信息。

我正在尝试按相应的统计权重对项目列表进行排序。我使用子查询让它工作,但我认为它有点低效并且可以优化...

items.OrderBy(item => (from metric in Context.ItemMetrics where item.ItemId == metric.ItemId select metric.Weight).FirstOrDefault());

...所以我正在尝试使用连接来完成同样的事情...

from item in items join metric in ItemMetrics on item.ItemId equals metric.ItemId orderby metric.Weight select item;

这在 LINQPad 中运行良好。我需要为补充方法返回一个 IOrderedQueryable 以使用 Skip 和 Take 进行一些分页,但编译器告诉我这个查询的结果是一个 IQueryable。

我能想到的明确暗示 IOrderedQueryable 的唯一方法是将查询包装在

OrderBy(x => 0)

有没有更好的办法?

最佳答案

问题是 IOrderedQueryable 需要能够应用二级排序 - 当您将项目/指标对投影到一个项目时,您已经失去了主要的顺序订购。

一种方法是将投影推迟到以后:

var ordered = items.Join(ItemMetrics,
item => item.ItemId,
metric => metric.ItemId,
(item, metric) => new { item, metric })
.OrderBy(pair => pair.Metric.Weight);
var paged = ApplyPaging(ordered, pageConfiguration); // Whatever
var query = paged.Select(pair => pair.Item);

假设 ApplyPaging(或您正在使用的任何内容)返回一个 IQueryable 或一个 IOrderedQueryable

关于c# - 将 IQueryable 转换为 IOrderedQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522366/

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