You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ如何按嵌套集合属性值通过OrderBy排序IEnumerable数据

LINQ实现多表关联按子表字段排序取数问题

我的数据库中共有3张表:Region(包含Country集合)、Country(包含City集合)。三张表均设有自身主键Id、关联父表的外键Id、名称字段,以下为Country类的定义示例:

public class Country 
{
   public int CountryId {get;set;}
   public int RegionId {get;set;} // 关联Region表外键
   public string CountryName {get;set;}
   public IEnumerable<City> Cities {get;set;}
}

在SQL中可通过三表关联,按CityName排序后取前5条Region数据,对应SQL语句如下:

SELECT top 5 r.* 
FROM Region r
JOIN Country c on r.RegionId=c.RegionId
JOIN City ct on ct.CountryId=c.CountryId
ORDER By ct.CityName

目前尝试编写的LINQ代码无法正常运行,需要可行的实现方案,失败代码如下:

var regionOrdered = context.Regions
        .OrderBy(x=>x.Countries
                     .SelectMany(y=>y.Cities
                                   .Select(u=>u.CityName)))
        .Take(5).ToList();

问题补充说明

必须通过OrderBy方法实现需求:项目中存在自定义扩展方法ApplySeveralOrderBy,方法定义如下:

static IQueryable<T> ApplySeveralOrderBy<T>(this IQueryable<T> queryableBase, Expression<Func<T, object>> orderProp) where T : class

该方法内部通过调用OrderBy传入排序属性表达式实现排序,需要确认是否可构造符合要求的排序表达式传入该扩展方法完成上述排序,或是该需求无法实现。

内容的提问来源于stack exchange,提问作者Dani Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:30:57