我有 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)
有没有更好的办法?