2009-05-16 3 views
0

Ich habe vor ein paar Tagen mit ASP.NET MVC 1.0 gespielt. Ich begann mit einer einzigen Tabelle DB namens "Kontakte", mit sehr einfacher Struktur, z. Titel, FullName, SurName, E-Mail, Telefon, Adresse usw.Wie erhält man einen eindeutigen Anfangsbuchstaben von Namen und Anzahl von Namen, die mit diesem Buchstaben von SQL Server unter Verwendung von LINQ beginnen?

Ich verwende LINQ als mein Modell.

In meiner Hauptansicht wollte ich eine Liste von Alphabeten anzeigen, die übereinstimmende FullNames haben, beginnend mit diesem Alphabet plus der Anzahl von FullNames. Some ähnlich wie unten gezeigt:

A - (2)
D - (4)
J - (1)
und so weiter. Eine Besonderheit der Anzeige ist, dass ich keine Alphabete anzeigen möchte, die keine Namen haben, die damit beginnen.

Ich habe ein paar Abfragen versucht, aber nicht gelingen. Jede Hilfe zur Lösung dieser Anfrage ist willkommen. Bitte geben Sie den Code in VB.NET Sprache an.

Danke.

Antwort

3
var query = from c in contacts 
       group c by c.FullName[0] into cg 
       select new { FirstChar = cg.Key, Count = cg.Count() }; 

sollte funktionieren

+0

Der Code funktioniert perfekt. Danke vielmals. Wenn Sie VB-Version des Codes bereitstellen können, tun Sie dies bitte. – MoizNgp

0

Es ist ein Beispiel auf MSDN, die sehr ähnlich ist:

public void Linq41() { 
      string[] words = { "blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese" }; 

      var wordGroups = 
       from w in words 
       group w by w[0] into g 
       select new { FirstLetter = g.Key, Words = g }; 

      foreach (var g in wordGroups) { 
       Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter); 
       foreach (var w in g.Words) { 
        Console.WriteLine(w); 
       } 
      } 
     } 

Sie müssten die Wörter ändern = g Count = g.Count in der select-Anweisung , so dass Sie nur die Gesamtsumme der Elemente in der Gruppe abfragen.

0

In VB.NET:

Dim FirstLetterCounts = From c In contacts _ 
         Group c By Key = c(0) Into NameGroup _ 
         Select FirstLetter = Key, Count = NameGroup.Count() 

For Each g In FirstLetterCounts 
    Console.WriteLine("First Letter = {0}, Count = {1}", g.Key, g.Count) 
Next 
+0

Hallo, danke für die Antwort. Ich teste den Code, den Sie in LinqPad gegen meine Datenbank bereitgestellt haben. Dies ist der Fehler, den ich bekomme: "Klasse 'LINQPad.User.Contacts' kann nicht indiziert werden, da es keine Standardeigenschaft hat." – MoizNgp

Verwandte Themen