我试图获得每个重复行的总和的不同行
DataTable newItems = new DataTable();
newItems.Columns.Add("Qty");
newItems.Columns.Add("BarcodeNumber");
newItems.Columns.Add("DisplayName");
newItems.Columns.Add("UnitPrice");
newItems.Columns.Add("TotalPrice");
newItems.Rows.Add(1, "URT29384", "Wallet", 88.8, 88.8);
newItems.Rows.Add(1, "URT29233", "Mouse", 4.44, 4.44);
newItems.Rows.Add(1, "URT29756", "Flash Drive", 1.47, 1.47);
newItems.Rows.Add(1, "URT29323", "Spoon", 99.95, 99.95);
newItems.Rows.Add(1, "URT29384", "Wallet", 88.8, 88.8);
newItems.Rows.Add(1, "URT29384", "Wallet", 88.8, 88.8);
Run Code Online (Sandbox Code Playgroud)
我希望结果如此
3 URT29384 Wallet 266.4 266.4
1 URT29233 Mouse 4.44 4.44
1 URT29756 Flash Drive 1.47 1.47
1 URT29323 Spoon 99.95 99.95
Run Code Online (Sandbox Code Playgroud)
这可能使用LINQ吗?这里有点帮助.. TYIA
是的,你可以使用Enumerable.GroupBy:
var result = newItems.AsEnumerable()
.GroupBy(r => r.Field<String>("BarcodeNumber"))
.Select(g => new {
Qty = g.Count(),
BarcodeNumber = g.Key,
DisplayName = g.First().Field<String>("DisplayName"),
UnitPrice = g.Sum(r => r.Field<double>("UnitPrice")),
TotalPrice = g.Sum(r => r.Field<double>("TotalPrice")),
})
.OrderByDescending(x => x.Qty);
Run Code Online (Sandbox Code Playgroud)
请注意,这不是一个DataTable或IEnumerable<DataRow>而是一个匿名类型与列.如果需要,您需要使用foreach循环将实际DataRows添加到另一个DataTable.
foreach (var grp in result)
Console.WriteLine("Qty:{0} BarcodeNumber:{1} DisplayName:{2} UnitPrice:{3} TotalPrice:{4}"
, grp.Qty, grp.BarcodeNumber, grp.DisplayName, grp.UnitPrice, grp.TotalPrice);
Run Code Online (Sandbox Code Playgroud)
你需要添加using System.Linq;.