簡體   English   中英

Linq Pivot 從 SQL 查詢

[英]Linq Pivot from SQL Query

我對 Linq 有疑問,該代碼過去是通過存儲過程在 sql 中處理的,但現在它應該通過 linq 在代碼上處理,這是我的數據庫架構

SQL 小提琴

我想要的是,從這些數據

訂單號 類型 連續劇
1個 氮化硼 BN 1
1個 是 1
2個 氮化硼 氮化硼2
2個 是2
3個 氮化硼 氮化硼3
3個 是 3

像這樣:

訂單號 bn
1個 是 1 BN 1
2個 是2 氮化硼3
3個 是2 氮化硼3

找到一個問題和解決方案來源 1 - Stackoverflow ,當我嘗試我的代碼時,我遇到了 SelectMany 問題

這是我試過的

var results = data_tech.GroupBy(l => l.serial).SelectMany( g => 
                     new 
                     { 
                         Metadata = g.Key, 
                         data = g 
                     });


 var pivoted = new List<PivotedEntity>();

foreach(var item in results)
{
    pivoted.Add( 
        new PivotedEntity
        {
            Order= item.orderNo,
            BE= item.data.Where(x => x.Name == "BE")
                        .FirstOrDefault().value,
            BN= item.data.Where(x => x.Name == "BN")
                         .FirstOrDefault().value,
        });
}

您可以通過將 group by element serial更改為OrderNo來簡單地實現這一點。 讓我舉一個例子,

        var list = new List<Order>() {
            new Order { orderNo = 1, Type = "BN", Serial = "BN 1" },
            new Order { orderNo = 1, Type = "BE", Serial = "BE 1" },
            new Order { orderNo = 2, Type = "BN", Serial = "BN 2" },
            new Order { orderNo = 2, Type = "BE", Serial = "BE 2" },
            new Order { orderNo = 3, Type = "BN", Serial = "BE 3" } ,
            new Order { orderNo = 3, Type = "BE", Serial = "BN 3" } };

            var results = list.GroupBy(l => l.orderNo).Select(g =>
                new
                {
                    Metadata = g.Key,
                    data = g
                });

            var pivoted = new List<PivotedEntity>();

            foreach (var item in results)
            {
                pivoted.Add(
                    new PivotedEntity
                    {
                        Order = item.Metadata,
                        BE = item.data.Where(x => x.Type == "BE")
                                    .FirstOrDefault().Serial,
                        BN = item.data.Where(x => x.Type == "BN")
                                     .FirstOrDefault().Serial,
                    });
            }

這會給你一些 output 像這張圖片。 快速觀察輸出窗口

編輯:Output PivotedEntity class =>

internal class PivotedEntity
    {
        public int Order { get; set; }
        public string BE { get; set; }
        public string BN { get; set; }
    }

暫無
暫無

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

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