c#Linq webforms为Dotnet.Highcharts发行的小组/小组

时间:2015-01-07 15:10:32

标签: .net

我正在努力解决c#中我想要分组的问题,并在List中汇总数据。以下是我正在使用的代码。

                        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()但我无法让它工作。

所以我们假设我们有Jan,Feb和March。 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

如果这没有意义,请告诉我,我会尽力澄清。

1 个答案:

答案 0 :(得分:0)

通过小型重新设计解决了这个问题

                        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);