问题描述
我是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)?