rgo*_*oal 3 c# asp.net datatable dataset
我有包含以下数据的数据表
Number Type Order count
1 1 R 1
1 1 R 1
1 1 R 1
1 2 R 1
Run Code Online (Sandbox Code Playgroud)
我希望得到这个结果
Number Type Order count
1 1 R 3
1 2 R 1
Run Code Online (Sandbox Code Playgroud)
如何按三列分组
var result = dt.AsEnumerable()
.GroupBy(x => {x.Field<string>("Number"))//need to group by Type and order also need to sum te total counts
Run Code Online (Sandbox Code Playgroud)
小智 6
目标
你的问题让我很好奇,所以我在 Stack Overflow 上做了一些挖掘。
esc 的答案出现也将解决您的问题。它发布在:如何在 DataTable.Select(Expression) 中使用 SELECT GROUP BY?:
将他的方法应用于您的问题给了我这个解决方案:
DataTable dt2 = dt.AsEnumerable()
.GroupBy(r => new { Number = r["Number"], Type = r["Type"], Order = r["Order"] })
.Select(g =>
{
var row = dt.NewRow();
row["Number"] = g.Key.Number;
row["Type"] = g.Key.Type;
row["Order"] = g.Key.Order;
row["Count"] = g.Count();
return row;
}).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
这将返回一个与输入 DataTable 的架构以及您请求的分组和计数相匹配的 DataTable。
以下是我用于在 LINQPad 中验证的完整代码:
DataTable dt = new DataTable("Demo");
dt.Columns.AddRange
(
new DataColumn[]
{
new DataColumn ( "Number", typeof ( int ) ),
new DataColumn ( "Type", typeof ( int ) ),
new DataColumn ( "Order", typeof ( string ) ),
new DataColumn ( "Count", typeof ( int ) )
}
);
dt.Rows.Add(new object[] { 1,1,"R", 1 });
dt.Rows.Add(new object[] { 1,1,"R", 1 });
dt.Rows.Add(new object[] { 1,1,"R", 1 });
dt.Rows.Add(new object[] { 1,2,"R", 1 });
DataTable dt2 = dt.AsEnumerable()
.GroupBy(r => new { Number = r["Number"], Type = r["Type"], Order = r["Order"] })
.Select(g =>
{
var row = dt.NewRow();
row["Number"] = g.Key.Number;
row["Type"] = g.Key.Type;
row["Order"] = g.Key.Order;
row["Count"] = g.Count();
return row;
}).CopyToDataTable();
foreach (DataRow row in dt2.Rows)
{
for (int i = 0; i < dt2.Columns.Count; i++)
Console.Write("{0}{1}",
row[i], // Print column data
(i < dt2.Columns.Count - 1)? " " : Environment.NewLine); // Print column or row separator
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
1 1 R 3
1 2 R 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11261 次 |
| 最近记录: |