我需要根据我的 c# 页面中的条件将数据表中的数据合并到一行中
例如
在此表中,我有不同的行,但最后三行具有相同的日期。我需要将表中的数据按日期组合
即在具有相同日期的行中,必须添加其他列中的数据,如下图所示
我的数据表包含非常大量的数据,所以你能在更少的迭代中帮助解决这个问题吗?
我会使用 linq 来实现这一点,我写了一个小案例,您可以对其进行一些修改以适应您的情况:
var list = new List<Model>();
list.Add(new Model { Date = DateTime.Now, Total = 3 });
list.Add(new Model { Date = DateTime.Now, Total = 3 });
list.Add(new Model { Date = DateTime.Now, Total = 3 });
var combined = from item in list
group item by new { item.Date, item.Total }
into grouped
select new Model
{
Date = grouped.Key.Date,
Total = grouped.Sum(i => i.Total)
};
这Model
是您的模型,其中包含表中显示的数据。基本上你在所有领域做一个小组,你需要是一样的。然后,您将创建一个新的“IEnumerable”,其中填充了分组条目。在这里,您可以使用 group-key 中的日期,并且可以对其他值求和。
- 编辑
要将所有内容作为行直接添加到 a 中DataTable
,您可以执行以下操作:
var list = new List<Model>();
list.Add(new Model { Date = DateTime.Today, Total = 3 });
list.Add(new Model { Date = DateTime.Today, Total = 3 });
list.Add(new Model { Date = DateTime.Today, Total = 3 });
var table = new DataTable();
table.Columns.Add("Date");
table.Columns.Add("Total");
foreach (var grouped in from item in list
group item by new { item.Date, item.Total }
into grouped
select grouped)
{
table.Rows.Add(grouped.Key.Date, grouped.Sum(i => i.Total));
}
I got the solution by doing this. The post of Bjorn helped me.
var drdatedisp = from row in dtfullreport.AsEnumerable()
group row by row.Field<string>("Order_Date") into g
select new
{
Order_Date = g.Key,
totalAmt = g.Sum(a => a.Field<int>("Item_Quantity"))
};
DataTable dtdatedisp = new DataTable();
dtdatedisp.Columns.Add("Order_Date");
dtdatedisp.Columns.Add("Quantity");
dtdatedisp.Rows.Clear();
foreach (var g in drdatedisp)
{
DataRow newRow1 = dtdatedisp.NewRow();
newRow1[0] = g.Order_Date;
newRow1[1] = g.totalAmt;
dtdatedisp.Rows.Add(newRow1);
}
also I added the data from the variables to a datatable.