C# &引用;个案陈述;在“a”中;“按查询分组”;实体框架6
我正在使用Entity Framework 6和SQL Server 2014 我需要进行分组查询。这很容易,但现在我需要一个特例。这里有一个例子来说明我需要什么 例如: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 因此
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()
}
});