2012-11-01 35 views
0

感謝您的期待!使用LINQ,如何從GroupBy子句返回對象?

背景

在我的C#代碼,我打電話從返回用戶已取得訂單的歷史的MSSQL數據庫的存儲過程。我爲此使用實體框架。下面是代碼:

var db = new CustomerEntities(); 
return db.GetOrderHistoryByUserId(id); 

此存儲過程的輸出與具有相同OrderNumber多個記錄,因爲有可能已被多個產品在一個給定的順序命令的列表。所以我修改我的代碼看起來像這樣:

var db = new CustomerEntities(); 
return db.GetOrderHistoryByUserId(id).GroupBy(p => p.OrderNumber); 

我希望現在有Order對象的嵌套Product對象列表,而是這個代碼基本上與之前產生相同的反應。

最終,我只是想把這個查詢轉換成看起來像這樣的JSON響應:

Orders : [ 
{ 
OrderNumber : 1, 
OrderTotal: $500, 
Products: [ 
    {ProductSku : 11111, ProductPrice: $200}, 
    {ProductSku : 22222, ProductPrice: $300} 
] 
} 
] 

我使用MVC 4中產生JSON輸出幫助,所以我就已經明確部分,我只需要知道如何以產生具有所需結構的對象數組的方式來使用存儲過程的結果。

問題

是否有與原LINQ調用存儲過程生產這種期望的對象結構的方式,還是我將需要重複存儲過程的結果,並建立一個新的對象?

感謝您的幫助!

+0

通過vote-down驅動的任何特定原因? –

回答

1

實際上,我在發帖之前就已經找到了這方面的幫助,不過我剛纔就回答了這個問題。我需要一個Select條款:

var db = new CustomerEntities(); 
return db.GetOrderHistoryByUserId(id).GroupBy(o => o.OrderNumber).Select(g => new {Order = g.Key, Items = g}); 

Click here to see the webpage that finally helped me.

希望這可以幫助別人。

2
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} 
            ) 
           }) 
      });