.NET 9.0'da Microsoft, temel sınıf kütüphanesinde yeni operatöre sahip CountBy() Entegre Dil Sorgusu (LINQ) için eklendi. Frekansa göre gruplandırılması gerekiyorsa, operatörü gerçekleştirmek artık gerekli değildir. GroupBy() kullanmak için.
Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Aşağıdaki kod örneği en yaygın isimleri belirler CountBy():
private static List<Person> GetData()
{
#region ---------------- Demodaten erstellen
int count = 10000;
CUI.H3($"Generiere {count} Demodaten...");
Randomizer.Seed = new Random(42); // Fester Seed für gleichbleibende Testdaten!
var personFaker = new AutoFaker<Person>("de") // Fake-Daten mit https://github.com/nickdodd79/AutoBogus
.RuleFor(fake => fake.ID, fake => fake.Random.Int(0))
.RuleFor(fake => fake.Givenname, fake => fake.Name.FirstName())
.RuleFor(fake => fake.Surname, fake => fake.Name.LastName())
.RuleFor(fake => fake.Birthday, fake => fake.Date.Past(100).Date)
.RuleFor(fake => fake.Team, fake => fake.Random.ArrayElement(new string[] { "MSV", "RWE", "BVB" }))
.RuleFor(fake => fake.Punkte, fake => fake.Random.Number(0, 10));
List<Person> personSet = new();
for (int i = 0; i < count; i++)
{
var p = personFaker.Generate();
personSet.Add(p);
}
Console.WriteLine("Anzahl Personen: " + personSet.Count);
#endregion
return personSet;
}
/// <summary>
/// Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen
/// </summary>
public void LINQ_CountBy()
{
CUI.Demo(nameof(LINQ_CountBy) + ": Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen");
List<Person> personSet = GetData();
// --------------------------- ALT
CUI.H2("10 häufigste Vornamen im Datenbestand (alt mit GroupBy() + Select())");
// bisherige Implementierung mit GroupBy() + Select()
var nameGroupsOld = personSet
.GroupBy(info => info.Givenname) // Gruppieren nach Häufigkeit des GivenName
.Select(group => new
{
Key = group.Key,
Value = group.Count() // Zählen
});
var groups1top10 = nameGroupsOld.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups1top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan1)));
// --------------------------- NEU
CUI.H2("n10 häufigste Vornamen im Datenbestand (neu mit CountBy())");
Dictionary<string, int> nameGroupsNew = personSet
.CountBy(x => x.Givenname); // Gruppieren nach Häufigkeit des GivenName
Console.WriteLine("10 häufigste Vornamen im Datenbestand:");
var groups2top10 = nameGroupsNew.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups2top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan2)));
}
Sonucu CountBy() VE Dictionary<T, T>Bir önceki uygulama ile GroupBy() Anonim bir tür sağlar.
Örnek kodun baskısı, Bar Edition için ek kitaplığın spectrowconsole'ini kullanır.
(Resim: Ekran görüntüsü (Holger Schwichtenberg))
(RME)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!

Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Aşağıdaki kod örneği en yaygın isimleri belirler CountBy():
private static List<Person> GetData()
{
#region ---------------- Demodaten erstellen
int count = 10000;
CUI.H3($"Generiere {count} Demodaten...");
Randomizer.Seed = new Random(42); // Fester Seed für gleichbleibende Testdaten!
var personFaker = new AutoFaker<Person>("de") // Fake-Daten mit https://github.com/nickdodd79/AutoBogus
.RuleFor(fake => fake.ID, fake => fake.Random.Int(0))
.RuleFor(fake => fake.Givenname, fake => fake.Name.FirstName())
.RuleFor(fake => fake.Surname, fake => fake.Name.LastName())
.RuleFor(fake => fake.Birthday, fake => fake.Date.Past(100).Date)
.RuleFor(fake => fake.Team, fake => fake.Random.ArrayElement(new string[] { "MSV", "RWE", "BVB" }))
.RuleFor(fake => fake.Punkte, fake => fake.Random.Number(0, 10));
List<Person> personSet = new();
for (int i = 0; i < count; i++)
{
var p = personFaker.Generate();
personSet.Add(p);
}
Console.WriteLine("Anzahl Personen: " + personSet.Count);
#endregion
return personSet;
}
/// <summary>
/// Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen
/// </summary>
public void LINQ_CountBy()
{
CUI.Demo(nameof(LINQ_CountBy) + ": Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen");
List<Person> personSet = GetData();
// --------------------------- ALT
CUI.H2("10 häufigste Vornamen im Datenbestand (alt mit GroupBy() + Select())");
// bisherige Implementierung mit GroupBy() + Select()
var nameGroupsOld = personSet
.GroupBy(info => info.Givenname) // Gruppieren nach Häufigkeit des GivenName
.Select(group => new
{
Key = group.Key,
Value = group.Count() // Zählen
});
var groups1top10 = nameGroupsOld.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups1top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan1)));
// --------------------------- NEU
CUI.H2("n10 häufigste Vornamen im Datenbestand (neu mit CountBy())");
Dictionary<string, int> nameGroupsNew = personSet
.CountBy(x => x.Givenname); // Gruppieren nach Häufigkeit des GivenName
Console.WriteLine("10 häufigste Vornamen im Datenbestand:");
var groups2top10 = nameGroupsNew.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups2top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan2)));
}
Sonucu CountBy() VE Dictionary<T, T>Bir önceki uygulama ile GroupBy() Anonim bir tür sağlar.

Örnek kodun baskısı, Bar Edition için ek kitaplığın spectrowconsole'ini kullanır.
(Resim: Ekran görüntüsü (Holger Schwichtenberg))
(RME)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!