gpt4 book ai didi

c# - DataTable.Select() 显示数据表中记录的总和

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:22 26 4
gpt4 key购买 nike

在我的 DataTable 中的 C# 项目中,我需要对几列求和并显示聚合记录,但我无法为此创建筛选查询。

像这样的记录:

|Col1|Col2|Col3|Col4|  
| A | X | 10 | 10 |
| A | X | 10 | 20 |
| A | Y | 12 | 12 |
| A | Y | 10 | 10 |

结果将是:

|Col1|Col2|Col3|Col4|  
| A | X | 20 | 30 |
| A | Y | 22 | 22 |

我必须使用 DataTable.Select("filter condition")

最佳答案

var result = (from DataRow s in yourDataTable.Select("filter conditions").AsEnumerable()
group s by new {g1 = s.Field<string>("Col1"), g2 = s.Field<string>("Col2") } into g
select new
{
Col1 = g.Key.g1,
Col2 = g.Key.g2,
Col3 = g.sum(r => r.Field<decimal>("Col3")),
Col4 = g.sum(r => r.Field<decimal>("Col4")),
}).ToList();

如果你想要结果作为 DataTable 类型,你可以将列表转换为 DataTable,如下所示:

var resultAsDataTable = ConvertListToDataTable(result);

public static DataTable ConvertListToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}

关于c# - DataTable.Select() 显示数据表中记录的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com