c# Linq webforms sum/group Dotnet.Highcharts 问题
c# Linq webforms sum/group by issue for Dotnet.Highcharts
我正在努力解决 c# 中的一个问题,我想对列表中的数据进行分组和求和。下面是我正在使用的代码。
var segment = new List<object[]>();
foreach (var q in quarter)
{
var data = db.tbl_complaints_data
.Where(d => d.organisation_id == o.organisation_id && d.Service == site && d.Date.Month == q && d.Date.Year == year && d.Q1 != null)
.GroupBy(d => d.Q1)
.Select(d => new { q1 = d.Key, total = d.Count() });
foreach (var d in data)
{
string q1String = "Unknown";
switch (d.q1)
{
case 1: q1String = "Stuff"; break;
case 2: q1String = "Stuff 2"; break;
case 3: q1String = "Stuff 3"; break;
default: break;
}
segment.Add(new Object[] { q1String, d.total });
}
}
Render_PieChart(segment);
传入的数据分布在多个月中,因此此代码每个月都会执行一次。我可以在声明末尾编辑段吗?我试过 .groupBy() 但我无法让它工作。
假设我们有 1 月、2 月和 3 月。 Jan 将运行,数据将像这样添加到 'segment':
stuff 1
stuff 2 2
stuff 3 3
然后 2 月将运行,我们得到与上面类似的结果,3 月也会发生同样的情况:
stuff 4
stuff 2 2
stuff 3 15
然后我想让列表 'segment' 只包含上面的总和,所以当我渲染图表时它只会包含:
stuff 5
stuff 2 4
stuff 3 18
如果这没有意义,请告诉我,我会尽力澄清。
通过一个小的重新设计解决了它
var segment = new List<object[]>();
int yc1 = new int(); int ac1 = new int(); int ot1 = new int();
foreach (var q in quarter)
{
var data = db.tbl_complaints_data
.Where(d => d.organisation_id == o.organisation_id && d.Service == site && d.Date.Month == q && d.Date.Year == year && d.Q1 != null)
.GroupBy(d => d.Q1)
.Select(d => new { q1 = d.Key, total = d.Count() });
foreach (var d in data)
{
switch (d.q1)
{
case 1: yc1 += d.total; break;
case 2: ac1 += d.total; break;
case 3: ot1 += d.total; break;
default: break;
}
}
}
if (yc1 >= 1)
segment.Add(new Object[] { "Stuff", yc1 });
if (ac1 >= 1)
segment.Add(new Object[] { "Stuff 2", ac1 });
if (ot1 >= 1)
segment.Add(new Object[] { "Stuff 3", ot1 });
Render_PieChart(segment);
我正在努力解决 c# 中的一个问题,我想对列表中的数据进行分组和求和。下面是我正在使用的代码。
var segment = new List<object[]>();
foreach (var q in quarter)
{
var data = db.tbl_complaints_data
.Where(d => d.organisation_id == o.organisation_id && d.Service == site && d.Date.Month == q && d.Date.Year == year && d.Q1 != null)
.GroupBy(d => d.Q1)
.Select(d => new { q1 = d.Key, total = d.Count() });
foreach (var d in data)
{
string q1String = "Unknown";
switch (d.q1)
{
case 1: q1String = "Stuff"; break;
case 2: q1String = "Stuff 2"; break;
case 3: q1String = "Stuff 3"; break;
default: break;
}
segment.Add(new Object[] { q1String, d.total });
}
}
Render_PieChart(segment);
传入的数据分布在多个月中,因此此代码每个月都会执行一次。我可以在声明末尾编辑段吗?我试过 .groupBy() 但我无法让它工作。
假设我们有 1 月、2 月和 3 月。 Jan 将运行,数据将像这样添加到 'segment':
stuff 1
stuff 2 2
stuff 3 3
然后 2 月将运行,我们得到与上面类似的结果,3 月也会发生同样的情况:
stuff 4
stuff 2 2
stuff 3 15
然后我想让列表 'segment' 只包含上面的总和,所以当我渲染图表时它只会包含:
stuff 5
stuff 2 4
stuff 3 18
如果这没有意义,请告诉我,我会尽力澄清。
通过一个小的重新设计解决了它
var segment = new List<object[]>();
int yc1 = new int(); int ac1 = new int(); int ot1 = new int();
foreach (var q in quarter)
{
var data = db.tbl_complaints_data
.Where(d => d.organisation_id == o.organisation_id && d.Service == site && d.Date.Month == q && d.Date.Year == year && d.Q1 != null)
.GroupBy(d => d.Q1)
.Select(d => new { q1 = d.Key, total = d.Count() });
foreach (var d in data)
{
switch (d.q1)
{
case 1: yc1 += d.total; break;
case 2: ac1 += d.total; break;
case 3: ot1 += d.total; break;
default: break;
}
}
}
if (yc1 >= 1)
segment.Add(new Object[] { "Stuff", yc1 });
if (ac1 >= 1)
segment.Add(new Object[] { "Stuff 2", ac1 });
if (ot1 >= 1)
segment.Add(new Object[] { "Stuff 3", ot1 });
Render_PieChart(segment);