C#过滤数据表并计算

C#过滤数据表并计算,c#,filter,datatable,C#,Filter,Datatable,我正在用数据表编写一个C#代码 该表如下所示: ID区域第1天第2天第3天第4天 a 10.10.1 0.1 0.1 0.1 b 10.10.1 0.1 0.1 0.1 c 10.10.1 0.1 0.1 0.1 d 20.1 0.1 0.1 0.1 0.1 E20.10.1 0.1 0.1 0.1 我想用区号过滤数据表,并将同一区域中的行相加?实现此功能的好方法是什么?这很简单。按区号过滤,按区域分组,然后汇总所有天数: DataTable table = new DataTable(); t

我正在用数据表编写一个C#代码

该表如下所示:

ID区域第1天第2天第3天第4天 a 10.10.1 0.1 0.1 0.1 b 10.10.1 0.1 0.1 0.1 c 10.10.1 0.1 0.1 0.1 d 20.1 0.1 0.1 0.1 0.1 E20.10.1 0.1 0.1 0.1
我想用区号过滤数据表,并将同一区域中的行相加?实现此功能的好方法是什么?

这很简单。按区号过滤,按区域分组,然后汇总所有天数:

DataTable table = new DataTable();
table.Columns.Add("ID", typeof(string));
table.Columns.Add("Area", typeof(int));
table.Columns.Add("Day1", typeof(double));
table.Columns.Add("Day2", typeof(double));
table.Columns.Add("Day3", typeof(double));
table.Columns.Add("Day4", typeof(double));

table.Rows.Add("a", 1, 0.1, 0.1, 0.1, 0.1);
table.Rows.Add("b", 1, 0.1, 0.1, 0.1, 0.1);
table.Rows.Add("c", 1, 0.1, 0.1, 0.1, 0.1);
table.Rows.Add("d", 2, 0.1, 0.1, 0.1, 0.1);
table.Rows.Add("e", 2, 0.1, 0.1, 0.1, 0.1);

var result = table.AsEnumerable().Where (t => t.Field<int>("Area") == 1)
                                 .GroupBy (t => t.Field<int>("Area"))
                                 .Select(x => new {
                                    Area = x.Key,
                                    Day1 = x.Sum (y => y.Field<double>("Day1")),
                                    Day2 = x.Sum (y => y.Field<double>("Day2")),
                                    Day3 = x.Sum (y => y.Field<double>("Day3")),
                                    Day4 = x.Sum (y => y.Field<double>("Day4"))
                                 });
result.Dump();
DataTable=newdatatable();
表.Columns.Add(“ID”,typeof(string));
表.列.添加(“面积”,类型(int));
表.列.添加(“第1天”,类型(双));
表.列.添加(“第2天”,类型(双));
表.列.添加(“第3天”,类型(双));
表.列.添加(“第4天”,类型(双));
表.行.添加(“a”、1、0.1、0.1、0.1、0.1);
表.行.添加(“b”,1,0.1,0.1,0.1,0.1);
表.行.添加(“c”,1,0.1,0.1,0.1,0.1);
表.行.添加(“d”、2、0.1、0.1、0.1、0.1);
表.行.添加(“e”、2、0.1、0.1、0.1、0.1);
var result=table.AsEnumerable()。其中(t=>t.Field(“Area”)==1)
.GroupBy(t=>t.Field(“区域”))
.选择(x=>new{
面积=x.键,
第1天=x.总和(y=>y.字段(“第1天”),
第2天=x.总和(y=>y.字段(“第2天”),
第3天=x.总和(y=>y.字段(“第3天”),
第4天=x.总和(y=>y.字段(“第4天”))
});
result.Dump();
输出:

Linqpad资料来源:

参考资料:


查看何处(过滤)和求和。写一些代码。如果你仍然卡住了,就把代码贴出来(准确地指出你卡住的地方)。非常感谢!这管用!但是对于一个大约1000行4000列的非常大的表,有没有好的计算方法呢?为什么不试试呢