簡體   English   中英

使用LINQ,如何從GroupBy子句返回對象?

[英]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.

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