簡體   English   中英

使用 LINQ 將數據表行的值合並到 1 行

[英]Merging Datatable rows' value into 1 row using LINQ

我有一個具有以下結構的 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 和零件編號進行分組,將數據行的值合並到 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)) };
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM