Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据表中的分组数据_C#_Sql_Linq_Datatable - Fatal编程技术网

C# 数据表中的分组数据

C# 数据表中的分组数据,c#,sql,linq,datatable,C#,Sql,Linq,Datatable,我从Excel文件中得到了一个数据表。现在,我想对datatable的Quantity1和Quantity2列求和,这两列按块、移植和变化进行分组。有可能吗 这是我从Excel文件中获取的数据表: 这就是我需要的结果: 编辑了答案,因为我对要求的理解不正确,我们需要使用列-块(字符串)、移植(日期时间)、变化(字符串)进行分组,并创建数量1(int)、数量2(int) 以下代码将有所帮助(它使用Linq API): 这将提供一个结果数据结构,如: IEnumerable<IGroupin

我从Excel文件中得到了一个数据表。现在,我想对datatable的Quantity1和Quantity2列求和,这两列按块、移植和变化进行分组。有可能吗

这是我从Excel文件中获取的数据表:

这就是我需要的结果:


编辑了答案,因为我对要求的理解不正确,我们需要使用列-
块(字符串)、移植(日期时间)、变化(字符串)
进行分组,并创建
数量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