LINQ查询使用GROUP BY和Count(*)进入匿名类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINQ查询使用GROUP BY和Count(*)进入匿名类型相关的知识,希望对你有一定的参考价值。

我正在尝试使用LINQ查询来确定我拥有的每个特定对象类型的数量,并将这些值记录到匿名类型中。

假设我有一些看起来像这样的数据(实际上有一些对象暴露了这个属性,但它的工作方式相同)

GroupId
1
1
2
2
2
3

我知道如何在SQL中格式化我的查询。它会是这样的:

SELECT grp = GroupId, cnt = COUNT(*)
FROM myTable
GROUP BY GroupId

在这种情况下,输出将类似于this SQL Fiddle

GroupID  Count
1        2
2        3
3        1

如何在vb.net中使用LINQ做同样的事情

Dim groupCounts = From person In data
                  Group By person.GroupId
                  Select new {group = person.GroupId, count = count(*)}

这不太对,但我认为它很接近。

另外,我不太了解匿名类型,我是否可以提前声明groupCounts它是一个枚举项目,每个项目都有一个group和count属性?

答案

尝试在LinqPad中使用它,并为您的数据库实体进行调整,它应该让您更接近。

Public Sub grouper2()
    Dim numbers = New Integer() {1,1,2,2,2,3}

    Dim numberGroups = From w In numbers _
                    Group w By Key = w Into Group _
                    Select Number = Key, numbersCount = Group.Count()

    'linqpad specific output
    'numberGroups.Dump()

    For Each g In numberGroups
        Console.WriteLine("Numbers that match '{0}':", g.Number)
            Console.WriteLine(g.numbersCount)        
    Next

End Sub
另一答案

我习惯了C#:

var query = from person in data
            group person by person.GroupId into grouping
            select new { Key = grouping.Key, Count = grouping.Count() }

但是我已经在VB中测试了以下代码片段并且它可以工作:

Dim files = Directory.GetFiles (Path.GetTempPath()).Take (100).ToArray().AsQueryable()

Dim groups = From f In files Group f By key = Path.GetExtension (f) Into Group
             Select Key = key, NumberGroup = Group.Count()
另一答案

因此,在翻译这种语法时,vb有点奇怪。看来你只能插入组into一个标题为“Group”的元素。然后,这将公开其余的分组功能

From person In data
Group person By grpId = person.GroupId Into Group
Select id = grpId, count = Group.Count

以上是关于LINQ查询使用GROUP BY和Count(*)进入匿名类型的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 查询转换为使用复数和 group by 的 Linq

EF Linq to Sql 多表left join查询并对结果group by分组之后进行count,max等处理

LINQ-Entities Group By With Range 变量查询

SQL to Entity Framework Count Group-By

C# Linq group by 和 group by into 运用实例

asp.net core 3.0 新手问题:如何这段带“count” 和 group by的sql代码,怎么转成 linq的写法?