C# &引用;个案陈述;在“a”中;“按查询分组”;实体框架6

C# &引用;个案陈述;在“a”中;“按查询分组”;实体框架6,c#,sql,sql-server,entity-framework,group-by,C#,Sql,Sql Server,Entity Framework,Group By,我正在使用Entity Framework 6和SQL Server 2014 我需要进行分组查询。这很容易,但现在我需要一个特例。这里有一个例子来说明我需要什么 例如: Table ID COLOR NAME 1 red1 aaa 2 red2 vvv 3 green1 fff 4 green2 ggg 5 yellow eee 让我们假设我必须按颜色分组,但是有一个键:我想把值red1和red2分组为红色和绿色1和绿色2 因此

我正在使用Entity Framework 6和SQL Server 2014

我需要进行分组查询。这很容易,但现在我需要一个特例。这里有一个例子来说明我需要什么

例如:

Table

ID  COLOR    NAME  
1    red1    aaa
2    red2    vvv
3    green1  fff
4    green2  ggg 
5    yellow  eee
让我们假设我必须按颜色分组,但是有一个键:我想把值red1和red2分组为红色和绿色1和绿色2

因此,如果我进行groupby&count查询,结果将是:

  Output 

  COLOR    COUNT
  red      2
  green    2
  yellow   1
实体框架是否可行?怎么做

这是我所在的一个小组。我可以修改它以达到我的目标,还是做一些不同的事情

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) } ) ;
更新->第二个场景

好的,建议的解决方案

是否可以创建此输出

  Output 

  COLOR    COUNT
  red      2
  green    2
  yellow   1
  allColor 5

如您所见,我在问您如何在我的查询中添加一行,并对所有行进行聚合计算。可能吗

要在LINQ语句更改中修复它:

GroupBy(x => 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() 
                                }
                          });

看起来很简单!!我会尽力让你知道的!:)
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() 
                                }
                          });