gpt4 book ai didi

c# - 带有 Entity Framework 6 的 "Case statement"中的 "group by query"

转载 作者:行者123 更新时间:2023-11-30 16:48:47 25 4
gpt4 key购买 nike

我正在使用 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

假设我必须按颜色分组,有一个键:我想将值 red1red2 分组为 < em>red 和 green1green2green

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

  Output 

COLOR COUNT
red 2
green 2
yellow 1

Entity Framework 可以吗?怎么办?

这是我的小组之一。我可以修改它以达到我的目标还是需要做一些不同的事情?

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).

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

关于c# - 带有 Entity Framework 6 的 "Case statement"中的 "group by query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37696783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com