EF 6/.NET Core 5中GroupBy分组后选取Min值及对应字段运行报错问题
LINQ按RateClass分组查询崩溃问题修复
你代码里存在的问题:
- 语法错误1:
costWeek = g.Select(x => .CostWeek)漏写了lambda参数引用,应为x => x.CostWeek,该问题会直接导致编译不通过 - 语法错误2:自定义输出字段名
costtDay多写了一个字母t,属于拼写笔误,后续调用该字段时会找不到对应属性 - 逻辑错误1:分组后
RateClass就是分组的键,不需要g.Select(x => x.RateClass),这会返回当前分组下所有RateClass的集合而非单个值,直接取g.Key即可 - 逻辑错误2:
g.Select(x => x.CostWeek)返回的是当前分组下所有CostWeek的集合,如果你需要的是单个值,需要指定聚合逻辑(比如取最小CostDay对应的CostWeek、取分组的最小CostWeek等),如果确实需要返回集合也需要确认下游逻辑是否支持接收集合类型
修复后的示例代码
场景1:需要返回每个分组的RateClass、最小CostDay、分组下所有CostWeek列表
var data = db.Rates .GroupBy(t => t.RateClass) .Select(g => new { RateClass = g.Key, MinCostDay = g.Min(x => x.CostDay), CostWeekList = g.Select(x => x.CostWeek).ToList() }) .ToList();
场景2:需要返回每个分组下CostDay最小的那条记录的RateClass、CostDay、CostWeek
var data = db.Rates .GroupBy(t => t.RateClass) .Select(g => g.OrderBy(x => x.CostDay).First()) .Select(x => new { x.RateClass, x.CostDay, x.CostWeek }) .ToList();
内容的提问来源于stack exchange,提问作者Ben Junior
相关产品推荐
相关产品推荐

