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
相关产品推荐
相关产品推荐

