2009-05-16 7 views
0

Je jouais avec ASP.NET MVC 1.0 il y a quelques jours. J'ai commencé avec une seule table DB nommée 'Contacts', avec une structure très simple, par ex. Titre, FullName, SurNom, Email, Téléphone, Adresse etc.Comment obtenir la première lettre unique des noms et le nombre de noms commençant par cette lettre de SQL Server utilisant LINQ?

J'utilise LINQ comme mon modèle.

Dans ma vue principale, je voulais afficher une liste d'alphabets dont les FullNames correspondent, en commençant par cet alphabet plus le nombre de FullNames. Someting similaire comme indiqué ci-dessous:

A - (2)
D - (4)
J - (1)
et ainsi de suite. Une chose particulière à propos de l'affichage est que je ne veux pas afficher les alphabets qui n'ont pas de noms commençant par eux.

J'ai essayé quelques requêtes mais je n'ai pas réussi. Toute aide pour résoudre cette requête est appréciée. Veuillez fournir le code dans le langage VB.NET.

Merci.

Répondre

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

devrait fonctionner

+0

Le code fonctionne parfaitement. Merci beaucoup. Si vous pouvez fournir la version VB du code, veuillez le faire. – MoizNgp

0

Il y a un exemple sur MSDN qui est très similaire:

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); 
       } 
      } 
     } 

vous devez changer les mots = g à Count = g.Count dans l'instruction select , donc vous interrogez uniquement la somme totale des éléments du groupe.

0

En 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

Salut, merci pour la réponse. Je teste le code que vous avez fourni dans LinqPad sur ma base de données. C'est l'erreur que j'obtiens: "Classe 'LINQPad.User.Contacts' ne peut pas être indexé car il n'a pas de propriété par défaut." – MoizNgp

Questions connexes