gpt4 book ai didi

c# - LINQ DataTable 选择不同的行

转载 作者:行者123 更新时间:2023-11-30 13:59:41 24 4
gpt4 key购买 nike

我试图用每个重复行的总和来获取不同的行

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);

我想要的结果是

 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

这可以使用 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);

请注意,这不是 DataTableIEnumerable<DataRow>但是你的专栏是匿名类型。如果需要,您需要使用 foreach 循环将真正的 DataRow 添加到另一个 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);

您需要添加 using System.Linq; .

关于c# - LINQ DataTable 选择不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com