Come arrivare unico Prima Lettera di nomi e contare di nomi che iniziano con quella lettera da SQL Server utilizzando LINQ?
Domanda
Stavo giocando con ASP.NET MVC 1.0 un paio di giorni fa. Ho iniziato con una singola tabella DB denominata 'Contatti', con struttura molto semplice esempio Titolo, FullName, cognome, email, telefono, indirizzo ecc.
Sto usando LINQ come il mio modello.
A mio avviso principale che ho voluto per visualizzare un elenco di alfabeti che hanno FullNames corrispondenti che iniziano con quella alfabeto più il conteggio di FullNames. Someting simile come illustrato di seguito:
A - (2)
D - (4)
J - (1)
e così via. Una cosa particolare circa il display è che io non voglio visualizzare tali alfabeti che non hanno nomi che iniziano con loro.
Ho provato un paio di domande, ma non ci sono riuscito. Qualsiasi aiuto per risolvere questa query è apprezzato. Si prega di fornire il codice in linguaggio VB.NET.
Grazie.
Soluzione
var query = from c in contacts
group c by c.FullName[0] into cg
select new { FirstChar = cg.Key, Count = cg.Count() };
dovrebbe funzionare
Altri suggerimenti
C'è un esempio di MSDN che è molto simile:
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);
}
}
}
Si dovrà cambiare le parole = g al conte = g.Count nell'istruzione SELECT, quindi si esegue una query solo la somma totale di elementi nel gruppo.
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