【发布时间】:2019-11-26 01:51:22
【问题描述】:
我正在尝试开发一种逻辑,可以将年龄列表分组到由元组定义的范围内,预期结果如下所示:
RANGE, QUANTITY
0-4, 3
5-9, 3
10-14, 1
15-19,2
为此,我创建了以下代码:
var peoples = new[] {
new { Id = 1, Age = 2 },
new { Id = 2, Age = 3 },
new { Id = 3, Age = 4 },
new { Id = 4, Age = 6 },
new { Id = 5, Age = 7 },
new { Id = 6, Age = 10 },
new { Id = 7, Age = 16 },
new { Id = 8, Age = 7 },
new { Id = 9, Age = 19 },
new { Id = 10, Age = 23 },
};
var rangesAccepted = new[] { 5, 10, 15, 20, 30 };
var tuples = new List<(int, int)>
{
(0, 4),
(5, 9),
(10, 14),
(15, 19)
};
var grouped = peoples.
GroupBy(x => rangesAccepted.FirstOrDefault(r => r >= x.Age))
.Select(g => new
{
Index = g.Key,
Quantity = g.Count()
})
.OrderBy(g => g.Index)
.ToList();
var grouped2 = new List<dynamic>();
foreach (var g in grouped)
{
foreach (var t in tuples)
{
if (g.Index >= t.Item1 && t.Item2 <= g.Index)
{
grouped2.Add(new
{
Range = $"{t.Item1}-{t.Item2}",
g.Quantity
});
}
}
}
起初,我使用的是一个列表,但我使用实体框架而不是使用静态列表从数据库中获取这些结果的真正原因。我阅读了其他答案,但没有一个人说如何显示上一个示例中所示的范围。
【问题讨论】:
标签: c# entity-framework arraylist tuples