2015-07-08 16 views
6

Voglio ottenere la stringa più comune da un elenco di modelli usando Linq, ma non so come.C# - Trova la stringa più comune in un elenco Modello

Ecco qualche esempio di codice:

public ModelClass { 
    public string name { get; set; } 
    public int num { get; set; } 
} 

immaginare un enorme listof ModelClass è memorizzato nel database

// in some controller 
var model = from s in _db.SomeClass 
      select s; 

string mostCommonName = ??????? 

Come dovrei trovare il nome più comune in questa lista utilizzando LINQ?

risposta

10

È possibile utilizzare GroupBy() per aiutare a trovare le stringhe con lo stesso valore di

var mostCommonName = _db.SomeClass 
    .GroupBy(x => x.Name) 
    .Select(x => new 
    { 
     Name = x.Key, 
     Count = x.Count() 
    }) 
    .OrderByDescending(x => x.Count) 
    .Select(x => x.Name) 
    .First(); 
+0

non è sicuro, solo chiedendo, Non abbiamo bisogno di eseguire confronto ordinale? –

+0

Si può anche usare 'ToLower()' (se case non è sensibile) per restituire i risultati corretti. – TestWell

+0

Ciao, sembra la risposta giusta. Non riesco davvero a farlo funzionare, perché ottengo l'errore 'impossibile convertire la sorgente '{Key: string, Count: int}' nel tipo di destinazione 'stringa'' se imposto' mostCommonName' come stringa e non come var . Cosa fare? – Rockyy

1
var query = from n in _db.SomeClass 
       group n by n.name into grouped 
       select new 
       { 
        name = grouped.First().name, 
        count = grouped.Count(), 
       } into result 
       orderby result.count descending 
       select result; 

    string mostCommonName = query.First().name; 
Problemi correlati