C# 数据表中的分组数据
我从Excel文件中得到了一个数据表。现在,我想对datatable的Quantity1和Quantity2列求和,这两列按块、移植和变化进行分组。有可能吗 这是我从Excel文件中获取的数据表: 这就是我需要的结果:C# 数据表中的分组数据,c#,sql,linq,datatable,C#,Sql,Linq,Datatable,我从Excel文件中得到了一个数据表。现在,我想对datatable的Quantity1和Quantity2列求和,这两列按块、移植和变化进行分组。有可能吗 这是我从Excel文件中获取的数据表: 这就是我需要的结果: 编辑了答案,因为我对要求的理解不正确,我们需要使用列-块(字符串)、移植(日期时间)、变化(字符串)进行分组,并创建数量1(int)、数量2(int) 以下代码将有所帮助(它使用Linq API): 这将提供一个结果数据结构,如: IEnumerable<IGroupin
编辑了答案,因为我对要求的理解不正确,我们需要使用列-
块(字符串)、移植(日期时间)、变化(字符串)
进行分组,并创建数量1(int)、数量2(int)
以下代码将有所帮助(它使用Linq API):
这将提供一个结果数据结构,如:
IEnumerable<IGrouping<<Anonymous type: string Block,DateTime Transplant,string Variety>,<Anonymous type: int Sum>>>
类型为IEnumerable
它由
Block(string)、Transplant(DateTime)、variation(string)、Sum(int)等列组成。编辑答案后,由于我对要求的理解不正确,我们需要使用Block(string)、Transplant(DateTime)、variation(string)等列进行分组
并创建数量1(int)和数量2(int)
以下代码将有所帮助(它使用Linq API):
这将提供一个结果数据结构,如:
IEnumerable<IGrouping<<Anonymous type: string Block,DateTime Transplant,string Variety>,<Anonymous type: int Sum>>>
类型为IEnumerable
它由以下列组成:Block(string)、Transplant(DateTime)、Variety(string)、Sum(int)
这应该可以让您开始使用。请注意,以下代码是在Linqpad中编写的,因此.Dump()
将仅在那里工作。您可能应该在生产中使用DateTime
替换移植类型。为了简单起见,我将其保留为字符串
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("Block");
dt.Columns.Add("Transplant");
dt.Columns.Add("Variety");
dt.Columns.Add("Quantity1");
dt.Columns.Add("Quantity2");
object[] r1 = {"A", "04/04/2017", "ROSE", 11, 11};
object[] r2 = {"A", "04/04/2017", "ROSE", 21, 11};
object[] r3 = {"B", "14/04/2017", "MN", 231, 11};
object[] r4 = {"A", "24/04/2017", "GG", 11, 11};
object[] r5 = {"A", "24/04/2017", "GG", 21, 21};
dt.Rows.Add(r1);
dt.Rows.Add(r2);
dt.Rows.Add(r3);
dt.Rows.Add(r4);
dt.Rows.Add(r5);
dt.Dump();
var grouped = dt.AsEnumerable().GroupBy (d => new
{
block = d.Field<string>("Block"),
transplant = d.Field<string>("Transplant"),
variety = d.Field<string>("Variety")
})
.Select(x => new {
Block = x.Key.block,
Transplant = x.Key.transplant,
Variety = x.Key.variety,
//replace ItemArray Index with appropriate values in your code
Q1 = x.Sum(y => int.Parse(y.ItemArray[3].ToString())),
Q2 = x.Sum(y => int.Parse(y.ItemArray[4].ToString())),
});
grouped.Dump();
DataTable dt=newdatatable();
dt.Clear();
dt.列。添加(“块”);
dt.列。添加(“移植”);
dt.列。添加(“品种”);
dt.列。添加(“数量1”);
dt.列。添加(“数量2”);
对象[]r1={“A”,“04/04/2017”,“ROSE”,11,11};
对象[]r2={“A”,“04/04/2017”,“ROSE”,21,11};
对象[]r3={“B”,“14/04/2017”,“MN”,231,11};
对象[]r4={“A”,“24/04/2017”,“GG”,11,11};
对象[]r5={“A”,“24/04/2017”,“GG”,21,21};
dt.Rows.Add(r1);
dt.Rows.Add(r2);
dt.行添加(r3);
dt.行。添加(r4);
dt.Rows.Add(r5);
dt.Dump();
var grouped=dt.AsEnumerable().GroupBy(d=>new
{
块=d.字段(“块”),
移植=d.字段(“移植”),
多样性=d.字段(“多样性”)
})
.选择(x=>new{
Block=x.Key.Block,
移植=x.Key.Transplant,
多样性=x.Key.多样性,
//在代码中用适当的值替换ItemArray索引
Q1=x.Sum(y=>int.Parse(y.ItemArray[3].ToString()),
Q2=x.Sum(y=>int.Parse(y.ItemArray[4].ToString()),
});
Dump();
输出:
第一个表是原始源数据,第二个表显示了从中得到的结果。这应该让您开始学习。请注意,以下代码是在Linqpad中编写的,因此
.Dump()
将仅在那里工作。您可能应该在生产中使用DateTime
替换移植类型。为了简单起见,我将其保留为字符串
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("Block");
dt.Columns.Add("Transplant");
dt.Columns.Add("Variety");
dt.Columns.Add("Quantity1");
dt.Columns.Add("Quantity2");
object[] r1 = {"A", "04/04/2017", "ROSE", 11, 11};
object[] r2 = {"A", "04/04/2017", "ROSE", 21, 11};
object[] r3 = {"B", "14/04/2017", "MN", 231, 11};
object[] r4 = {"A", "24/04/2017", "GG", 11, 11};
object[] r5 = {"A", "24/04/2017", "GG", 21, 21};
dt.Rows.Add(r1);
dt.Rows.Add(r2);
dt.Rows.Add(r3);
dt.Rows.Add(r4);
dt.Rows.Add(r5);
dt.Dump();
var grouped = dt.AsEnumerable().GroupBy (d => new
{
block = d.Field<string>("Block"),
transplant = d.Field<string>("Transplant"),
variety = d.Field<string>("Variety")
})
.Select(x => new {
Block = x.Key.block,
Transplant = x.Key.transplant,
Variety = x.Key.variety,
//replace ItemArray Index with appropriate values in your code
Q1 = x.Sum(y => int.Parse(y.ItemArray[3].ToString())),
Q2 = x.Sum(y => int.Parse(y.ItemArray[4].ToString())),
});
grouped.Dump();
DataTable dt=newdatatable();
dt.Clear();
dt.列。添加(“块”);
dt.列。添加(“移植”);
dt.列。添加(“品种”);
dt.列。添加(“数量1”);
dt.列。添加(“数量2”);
对象[]r1={“A”,“04/04/2017”,“ROSE”,11,11};
对象[]r2={“A”,“04/04/2017”,“ROSE”,21,11};
对象[]r3={“B”,“14/04/2017”,“MN”,231,11};
对象[]r4={“A”,“24/04/2017”,“GG”,11,11};
对象[]r5={“A”,“24/04/2017”,“GG”,21,21};
dt.Rows.Add(r1);
dt.Rows.Add(r2);
dt.行添加(r3);
dt.行。添加(r4);
dt.Rows.Add(r5);
dt.Dump();
var grouped=dt.AsEnumerable().GroupBy(d=>new
{
块=d.字段(“块”),
移植=d.字段(“移植”),
多样性=d.字段(“多样性”)
})
.选择(x=>new{
Block=x.Key.Block,
移植=x.Key.Transplant,
多样性=x.Key.多样性,
//在代码中用适当的值替换ItemArray索引
Q1=x.Sum(y=>int.Parse(y.ItemArray[3].ToString()),
Q2=x.Sum(y=>int.Parse(y.ItemArray[4].ToString()),
});
Dump();
输出:
第一个表是原始源数据,第二个表显示了从中得到的结果。您使用的是哪种dbms-Excel?(答案可能是特定于产品的。)SQL,我想从excel获取数据以插入数据库SQL是一种语言,而不是数据库。也许您的意思是MS SQL Server?
DataTable
是独立于数据库的,是一个断开连接的体系结构组件。是MS SQL Server,您使用的是哪个dbms?Excel?(答案可能是特定于产品的。)SQL,我想从excel获取数据以插入数据库SQL是一种语言,而不是数据库。也许你的意思是MS SQL Server?DataTable
是独立于数据库的,是一个断开连接的体系结构组件。是的,它是MS SQL Server