2013-05-10 16 views
6

Her bir belirli nesne türünün kaçını saptamak ve bu değerleri anonim bir türe kaydetmek için bir LINQ sorgusu kullanmaya çalışıyorum. GROUP BY ve Count (*) ile LINQ sorgusu Anonim Tip içine

GroupId 
1 
1 
2 
2 
2 
3 

SQL'de benim sorgu biçimlendirmek biliyorum en Şöyle bazı veriler var demek (orada gerçekten bu özelliği açığa nesneler oldukları için, ama aynı çalışacağız) olsun.

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

Bu durumda çıkış this gibi bir şey olurdu: Böyle bir şey olurdu ben vb.net içinde LINQ ile aynı şeyi yapabilir Nasıl

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(*)} 

Bu doğru değil ama bence yakın.

Ayrıca, anonim türler hakkında fazla bir şey bilmemekle birlikte, her birinin bir grup ve mülk özelliği olan öğelerin numaralandırması olacağını önceden groupCounts bildirebilir miyim?

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

Ama VB aşağıdaki pasajı test ettik ve işe yarıyor:

cevap

7

LINQPad bu kullanmayı deneyin kalanını açığa çıkarır ve veritabanı varlık için dışarı subbing daha yakın almak gerekir.

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# alışkınım bu tercüme gelince

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

Yani vb biraz garip sözdizimi. into gruplarını yalnızca "Group" başlıklı bir öğeye ekleyebilirsiniz. Bu da gruplama işlevselliği

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