Kyl*_*Mit 6 .net linq vb.net group-by anonymous-types
我正在尝试使用LINQ查询来确定我拥有的每个特定对象类型的数量,并将这些值记录到匿名类型中.
假设我有一些看起来像这样的数据(实际上有一些对象暴露了这个属性,但它的工作原理相同)
GroupId
1
1
2
2
2
3
Run Code Online (Sandbox Code Playgroud)
我知道如何在SQL中格式化我的查询.它会是这样的:
SELECT grp = GroupId, cnt = COUNT(*)
FROM myTable
GROUP BY GroupId
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出将类似于这个SQL小提琴:
GroupID Count
1 2
2 3
3 1
Run Code Online (Sandbox Code Playgroud)
如何在vb.net中使用LINQ做同样的事情
Dim groupCounts = From person In data
Group By person.GroupId
Select new {group = person.GroupId, count = count(*)}
Run Code Online (Sandbox Code Playgroud)
这不太对,但我认为它很接近.
另外,我不太了解匿名类型,我是否可以groupCounts提前声明它将是每个具有group和count属性的项目的枚举?
Sal*_*der 15
我习惯了C#:
var query = from person in data
group person by person.GroupId into grouping
select new { Key = grouping.Key, Count = grouping.Count() }
Run Code Online (Sandbox Code Playgroud)
但是我已经在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()
Run Code Online (Sandbox Code Playgroud)
尝试在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
Run Code Online (Sandbox Code Playgroud)