按 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)?
我是 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)?