2016-06-08 53 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