[英]Using LINQ, How do I return objects from a GroupBy clause?
感謝您的光臨!
在我的C#代碼中,我正在從MSSQL數據庫調用存儲過程,該存儲過程返回用戶所下訂單的歷史記錄。 我為此使用實體框架。 這是代碼:
var db = new CustomerEntities();
return db.GetOrderHistoryByUserId(id);
此存儲過程的輸出是訂單列表,其中多個記錄具有相同的OrderNumber
因為給定訂單中可能有多個產品。 所以我修改了代碼,使其看起來像這樣:
var db = new CustomerEntities();
return db.GetOrderHistoryByUserId(id).GroupBy(p => p.OrderNumber);
我希望現在有了包含嵌套的Product
對象的Order
對象的列表,但是該代碼實際上產生了與以前相同的響應。
最終,我只想將此查詢轉換為類似於以下內容的JSON響應:
Orders : [
{
OrderNumber : 1,
OrderTotal: $500,
Products: [
{ProductSku : 11111, ProductPrice: $200},
{ProductSku : 22222, ProductPrice: $300}
]
}
]
我正在使用MVC 4來輔助產生JSON輸出,因此我已經很清楚了,我只需要知道如何以產生具有所需結構的對象數組的方式使用存儲過程的結果即可。
有沒有一種方法可以通過對存儲過程的原始LINQ調用來生成所需的對象結構,還是我需要迭代存儲過程的結果並構造一個新對象?
謝謝你的幫助!
var serializer = new JavaScriptSerializer();
var rows = db.GetOrderHistoryByUserId(id);
var json = serializer.Serialize(
new { Orders = rows.GroupBy(o => o.Number)
.Select(g =>
new
{
OrderNumber = g.Key,
OrderTotal = g.Sum(o => o.Price),
Products = g.Select(
o => new {SKU = o.Sku, ProductPrice = o.Price}
)
})
});
實際上,在發布之前,我確實在此方面尋求幫助,但是我剛巧想到了答案。 我需要一個Select
子句:
var db = new CustomerEntities();
return db.GetOrderHistoryByUserId(id).GroupBy(o => o.OrderNumber).Select(g => new {Order = g.Key, Items = g});
希望這對某人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.