2013-05-10 5 views
6

私はLINQクエリを使用して、それぞれの特定のオブジェクトタイプをいくつ確認し、それらの値を匿名型に記録しようとしています。 GROUP BYのLINQクエリと匿名タイプのCount(*)

GroupId 
1 
1 
2 
2 
2 
3 

私はSQLで私のクエリをフォーマットする方法を知っているのは、私はこのようになりますいくつかのデータを持っていると言う(そこは本当にこのプロパティを暴露するオブジェクトですが、それは同じように動作します)してみましょう。

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

この場合、出力はthisのようなものになるだろう:それはこのようなものになるだろう、私はvb.netでLINQと同じことを行うことができますどのように

GroupID Count 
1  2 
2  3 
3  1 

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

これは間違いですが、近いと思います。

また、匿名型についてはあまり知らないのですが、実際にはそれぞれグループとカウントプロパティを持つ項目の列挙になると、先にgroupCountsを宣言できますか?

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

しかし、私はVBで次のコードをテストしてきたし、それが動作します::

答えて

7

の残りの部分は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 
14

私はC#に慣れて、それはこれを翻訳することになると

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() 
2

だからVBは少し奇妙です構文。グループintoを挿入することができるのは、「Group」という名前の要素だけです。これは、その後、グループ化機能

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