c# Datatable -使用linq对多个列进行分组
本文关键字:Datatable 使用 linq | 更新日期: 2023-09-27 18:12:47
我有一个这样的Datatable
| Supplier | Product | Price1 | Price2 | Price3 | ... | PriceN |
|-----------|---------|--------|--------|--------|-----|--------|
| Supplier1 | Orange | 100 | 105 | 150 | ... | 180 |
| Supplier1 | Orange | 110 | 130 | 140 | ... | 180 |
| Supplier2 | Orange | 200 | 250 | 270 | ... | 350 |
| Supplier2 | Orange | 250 | 270 | 320 | ... | 270 |
我想将行分组为下一行:
| Supplier | Product | Price1 | Price2 | Price3 | ... | PriceN |
|-----------|---------|---------|---------|---------|-----|---------|
| Supplier1 | Orange | 100-110 | 105-130 | 140-150 | ... | 180 |
| Supplier2 | Orange | 200-250 | 250-270 | 270-320 | ... | 270-350 |
像"PriceN"这样的列的计数可以是任意的。我如何用LINQ做到这一点?
您可以将Supplier
和Product
分组为
var result = from x in data
group x by new { x.Supplier, x.Product }
select x;
或
var result = data.GroupBy(x => new { x.Supplier, x.Product });
同样,你可以在group子句
你必须在另一个lambda表达式中单独分组
result.tolist().GroupBy(p=> p.x,p.x2,p.x3 ...);
您可以使用GroupBy
和JOIN
来连接价格列的值:
var groupedSupplier = supplier.GroupBy(s => new { s.Supplier, s.Product })
.Select(supplier => supplier.Supplier,
supplier.Product,
supplier.Price1 = string.Join(",", supplier.Select(x => x.Price1)),
supplier.Price2 = string.Join(",", supplier.Select(x => x.Price2)),
...);
在lambda表达式中按多列分组使用:
var groupedSupplier = supplier.GroupBy(s => s.Supplier,
s => s.Product)
详细信息,请参见Jon Skeet的"c#深度"第11章,第11章"查询表达式和LINQ到对象:11.6分组和延续",http://csharpindepth.com/