使用 LINQ 将数据表行的值合并为 1 行



我有一个c#数据表,结构如下:

ProductID   PartNo   Grade1   Grade2   Grade3
Product1       P1      A       N/A      Z  
Product1       P2      B        E       Y 
Product1       P3      C        F       X 
Product2       P1      D       N/A      V   
Product2       P3     N/A       G       W 

我想通过根据P1,P2,P3(固定列表)的顺序将产品ID和零件号分组,将数据row的值合并为1行。结束格式为P1_P2_P3,因此最终结果为:

ProductID    PartNo        Grade1        Grade2     Grade3
Product1    P1_P2_P3        A_B_C        N/A_E_F     Z_Y_X  
Product2    P1_P2_P3      D_N/A_N/A     N/A_N/A_G   V_N/A_W  

在foreach循环中,是否有更好的方法通过c# LINQ实现最终输出?

我认为你可以group_by PID然后选择新对象,像这样:

data.
GroupBy(p => p.Id).
Select(group => return new {
Id: group.Key,
Part_No: group.Value.Sum(group_row.Part_No),
Grade1: group.Value.Sum(group_row.Grade1),
etc...
});

我写这是我的头,所以不要复制,但这种方法可能有效…

请尝试下面的LINQ表达式,

Prodcuts.GroupBy(product=>product.ProductId).Select(productGroup=>{
return new { ProductId = productGroup.Key, PartNo = string.Join("_", productGroup.Select(p => p.PartNo)), Grade1 = string.Join("_", productGroup.Select(p => p.Grade1)), Grade2 = string.Join("_", productGroup.Select(p => p.Grade2)), Grade3 = string.Join("_", productGroup.Select(p => p.Grade3)) };
});

最新更新