使用Group By和Let的LINQ查询

ASN

我有下表

Name    Consumed
A   Flavour 1
B   Flavour 2
C   Flavour 1
C   Flavour 3
A   Flavour 3
B   Flavour 1
C   Flavour 3
A   Flavour 2
A   Flavour 1
C   Flavour 1
A   Flavour 1
B   Flavour 2

在第一列中,我有这些人的名字,在第二列中,是他们所喜欢的风味。我想生成下表,以风味为列,并找到每个人喜欢的风味的总和。我知道使用SQL的解决方案,但是我正在寻找使用LINQ VB.Net的解决方案。

Name  Flavour 1  Flavour 2  Flavour 3
A     3          1          1
B     1          2          0
C     2          0          2

SQL Query以达到上述结果,

SELECT Name, 
SUM(CASE WHEN Consumed='Flavour 1' THEN 1 ELSE 0) AS Flavour 1,
SUM(CASE WHEN Consumed='Flavour 2' THEN 1 ELSE 0) AS Flavour 2,
SUM(CASE WHEN Consumed='Flavour 3' THEN 1 ELSE 0) AS Flavour 3
GROUP BY Name

下面是LINQ查询,

Dim query = (From row In dtMain.AsEnumerable
             Let Flavour_1 = IIf(row.Field(Of String)("Consumed") = "1", 1, 0)
             Let Flavour_2 = IIf(row.Field(Of String)("Consumed") = "2", 1, 0)
             Let Flavour_3 = IIf(row.Field(Of String)("Consumed") = "3", 1, 0)
             Group row By Code = row.Field(Of String)("Name")
             Into freq = Group Select .Code = Code, .Count = freq.Count()).ToList

我的困难在于如何使用SUM函数汇总临时变量Flavour_1,Flavour_2和Flavour_3并按名称分组。

懒惰

给定以下数据:

Dim table = {
    New With { .Name = "A", .Consumed = "Flavor 1" }, 
    New With { .Name = "B", .Consumed = "Flavor 2" }, 
    New With { .Name = "C", .Consumed = "Flavor 1" }, 
    New With { .Name = "C", .Consumed = "Flavor 3" }, 
    New With { .Name = "A", .Consumed = "Flavor 3" }, 
    New With { .Name = "B", .Consumed = "Flavor 1" }, 
    New With { .Name = "C", .Consumed = "Flavor 3" }, 
    New With { .Name = "A", .Consumed = "Flavor 2" }, 
    New With { .Name = "A", .Consumed = "Flavor 1" }, 
    New With { .Name = "C", .Consumed = "Flavor 1" }, 
    New With { .Name = "A", .Consumed = "Flavor 1" }, 
    New With { .Name = "B", .Consumed = "Flavor 2" }
}

您要查询的查询是:

Dim result = From e In table 
             Group e By Name = e.Name Into g = group
             Select New With 
             { 
                .Name = Name, 
                .Flavour1 = g.Count(Function(x) x.Consumed = "Flavor 1"), 
                .Flavour2 = g.Count(Function(x) x.Consumed = "Flavor 2"), 
                .Flavour3 = g.Count(Function(x) x.Consumed = "Flavor 3") 
             }

在此处输入图片说明

它与SQL非常相似(先分组,然后聚合),但您使用Count而不是SUM

您不需要Let

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用包含和不包含的Linq查询

来自分类Dev

使用嵌套子查询和GROUP BY的SQL查询

来自分类Dev

LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

来自分类Dev

使用GROUP BY的MySQL查询和使用ORDER BY的子查询

来自分类Dev

使用sum和group by将sql查询转换为linq

来自分类Dev

使用GROUP BY和COUNT优化/重写LINQ查询

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

使用Linq查询和过滤JObjects数组

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

如何在同一查询linq上使用Where,Group By,Select和OrderBy?

来自分类Dev

如何在LINQ中使用SUM和GROUP BY函数

来自分类Dev

如何使用JPA使用AVG和GROUP创建条件查询

来自分类Dev

使用UNION和GROUP BY的AS

来自分类Dev

LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

来自分类Dev

使用linq group by语句作为子查询

来自分类Dev

通过LINQ迭代到包含COUNT和GROUP BY的SQL查询

来自分类Dev

使用GROUP BY和IN的SQL查询太慢

来自分类Dev

使用group by的oracle sql查询

来自分类Dev

如何使用Linq Group By和Distinct进行Treeview

来自分类Dev

使用SelectToken和LINQ查询JSON

来自分类Dev

使用案例将SQL group by和order by转换为Linq

来自分类Dev

在多个字段SUM和COUNT上使用GROUP BY的Linq查询

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

在LINQ to SQL中使用group by

来自分类Dev

Linq 使用左连接如何使用 order by 和 group by?

来自分类Dev

使用 Group By 和 Being 的 SQL 查询

来自分类Dev

使用 GROUP BY ALL 重写查询

来自分类Dev

如何使用 linq GROUP BY multiple 和 SELECT 查询

来自分类Dev

使用 sum 和 group by 条件将 SQL 查询转换为 linq/lambda 表达式

Related 相关文章

热门标签

归档