[英]Linq Pivot from SQL Query
我對 Linq 有疑問,該代碼過去是通過存儲過程在 sql 中處理的,但現在它應該通過 linq 在代碼上處理,這是我的數據庫架構
我想要的是,從這些數據
訂單號 | 類型 | 連續劇 |
---|---|---|
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 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.