.NET7下LINQ按RegistrationNumber去重后按DriverToLoad排序失效问题求助
问题原因
你当前的OrderBy(m => m.DriverToLoad)仅作用于单个分组内部,目的是从每个RegistrationNumber分组中选出DriverToLoad最小的那条数据。但GroupBy操作返回的分组集合默认会按分组键(也就是RegistrationNumber)排序,因此最终查询结果会继承这个分组顺序,而非你期望的整体按DriverToLoad排序。
解决方法
在筛选出每个分组的目标数据后,对整个结果集再执行一次OrderBy,指定按DriverToLoad排序即可:
Drive = await _db.Drive .Where(m => m.StatusId is 5 or 1010 or 1012) .Include(s => s.DriveStatus) .Include(d => d.Location) .Include(f => f.Item) .GroupBy(m => m.RegistrationNumber) .Select(g => g.OrderBy(m => m.DriverToLoad).First()) .OrderBy(m => m.DriverToLoad) // 新增这一行,对整体结果排序 .ToListAsync(),
额外说明:.NET7支持is模式匹配简化条件判断,上述代码用is替代了原有的==写法,你也可以保留原判断逻辑,不影响功能。
内容的提问来源于stack exchange,提问作者René Wester
相关产品推荐
相关产品推荐

