2016-06-08 17 views
3

我正在使用Entity Framework 6和SQL Server 2014.「實例框架」中的「Case by query」6

我需要通過查詢來完成一個組。這很容易,但現在我需要一個特殊情況。這裏有一個例子來說明我需要什麼。

例子:

Table 

ID COLOR NAME 
1 red1 aaa 
2 red2 vvv 
3 green1 fff 
4 green2 ggg 
5 yellow eee 

讓我們假設我要通過顏色,與債券組:我想組一起價值RED1RED2紅色綠1green2 as green

所以,如果我做一個GROUPBY &計數查詢時,result'd是:

Output 

    COLOR COUNT 
    red  2 
    green 2 
    yellow 1 

是否有可能與實體框架?怎麼樣?

這是我的一個由stastement組。我可以修改它以達到我的目標嗎?還是有點不同嗎?

var groupedData = MyData.GroupBy(x => x.Products.NAME).Select(g => new { Product = g.Key, Total = g.Sum(x => x.IMPORT), Quantity = g.Sum(x => x.QTY) }) ; 

UPDATE - >第二場景

確定對於所提出的方案。

是否可以創建此輸出?

Output 

    COLOR COUNT 
    red  2 
    green 2 
    yellow 1 
    allColor 5 

因此,正如你所看到的,我問你如何在我的查詢中添加一行,並對所有行進行聚合計算。可能嗎?

回答

2

要修復它在LINQ的語句變化:

GroupBy(x => x.Products.NAME). 

GroupBy(x => { if (x.Products.NAME.StartsWith("green")) return "green"; 
       if (x.Products.NAME.StartsWith("red")) return "red"; 
       return x.Products.NAME; }). 

回答您的問題的更新。您應該使用總計將一行連接到您的收藏。只需使用CONCAT和一個元素的新數組。

var groupedData = MyData.GroupBy(x => { 
      if(x.Products.NAME.StartsWith("green")) return "green"; 
      if (x.Products.NAME.StartsWith("red")) return "red"; 
      return x.Products.NAME; }) 
      .Select(g => new { Product = g.Key, Cnt = g.Count()}) 
      .Concat(new[] { new { Product = "allColor", 
           Cnt = MyData.Count() 
           } 
          }); 
+0

看起來簡單!我會盡力而且會讓你知道! :) –

+0

你可以看看我的編輯問題? –

+0

@PieroAlberto我已經添加了此更新的查詢。 – valex