【发布时间】:2019-11-05 08:59:49
【问题描述】:
假设这个模型:
public class Model
{
public DateTime Created { get; set; }
public int Quota { get; set; }
}
我需要指定一年中的特定月份,并提取Quota 的摘要,但我只需要在该月的每一天抓取一个(列表中的最大值为 31,最小值为 28,具体取决于日期),并且该条目必须是 Quota 最高的条目。示例:
[{
created: "10/1/2019",
quota: 5
}, {
created: "10/1/2019",
quota: 6
}, {
created: "10/2/2019",
quota: 1
}]
在那个例子中,我会得到两个项目:
[{
created: "10/1/2019",
quota: 6
}, {
created: "10/2/2019",
quota: 1
}]
因为Quota = 6 高于Quota = 5 并且它们在同一日期(10 月 1 日)。
public List<Model> GetMonthlyData(int year, int month)
{
var list = await _dbContext
.Where(x => x.Created.Year == year && x.Created.Month == month)
.GroupBy(x => x.Created.Day)
.OrderByDescending(x => x.Quota)
.Select(x => x.First())
.ToListAsync();
return list;
}
我想要这样的东西。按天分组,按降序排列(因此第一项具有最高配额),选择组中的第一项,并将它们转换为列表。但是,我无法弄清楚如何做到这一点。我敢肯定这真的很简单,但我看不到我的错误在哪里。
【问题讨论】:
-
GroupBy 返回一个复合对象:一个键(即日期)和与该键相关的项目的枚举(即原始项目)。
-
GroupBy(...).Select(grp => grp.OrderByDescending(x => x.Quota).First()).ToList()