使用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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用Linq查询和过滤JObjects数组

来自分类Dev

使用SelectToken和LINQ查询JSON

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

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

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

使用 Group By 和 Being 的 SQL 查询

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用UNION和GROUP BY的AS

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在LINQ to SQL中使用group by

来自分类Dev

在多个条件和子查询中使用LINQ左联接

来自分类Dev

使用多个联接和谓词优化LINQ查询

来自分类Dev

如何使用变量where和select进行LINQ查询?

来自分类Dev

使用组和联接的C#中的LINQ查询

来自分类Dev

使用linq和相关实体查询实体框架7

Related 相关文章

热门标签

归档