按 C# 中数据表的计数分组

Group by its count from datatable in C#

我是 linq 新手。

我有一个数据表,需要使用 linq 根据另一列更新一列。

我的价值

customer | value1  |  value2  | count
---------------------------------------- 
   A     |   sda   |  sdas    |  0
   A     |   sda   |  sdas    |  0
   B     |   sda   |  sdas    |  0
   B     |   sda   |  sdas    |  0
   B     |   sda   |  sdas    |  0
   C     |   sda   |  sdas    |  0

预期价值

customer | value1  |  value2  | count
---------------------------------------- 
   A     |   sda   |  sdas    |  2
   A     |   sda   |  sdas    |  2
   B     |   sda   |  sdas    |  3
   B     |   sda   |  sdas    |  3
   B     |   sda   |  sdas    |  3
   C     |   sda   |  sdas    |  1

你能给我建议上面数据表所需的 linq 吗?

您没有提供代码,但我认为您正在寻找这样的代码:(假设您的 DataTable 名为 'dt')

foreach(DataRow dr in dt.Rows) // loop whole table
{
   //Find count of rows which has same value
    var count = dt.AsEnumerable().Where(i=> i["customer"] == dr["customer"] && i["value1"] == dr["value1"] && i["value2"] == dr["value2"]).Count();
    
    /Then update count column
    dr["count"] = count;
}

您可以遵循的另一种方法是 GroupBy 数据表中的多个列。

 dt.AsEnumerable()
    .GroupBy(g => new {Customer = g["customer"], Value1 = g["value1"], Value2= g["value2"]})
    .Select(g=> 
    {
        var newRow = dtNew.NewRow();
        
        row["customer"] = g.Key.Customer;
        row["value1"] = g.Key.Value1;
        row["value2"] = g.Key.Value2;
        row["count"] = g.Count();
        
        return newRow;
    })
    .CopyToDataTable();

参见:How do I use SELECT GROUP BY in DataTable.Select(Expression)?