2015-07-08 2 views
6

Ich möchte die häufigste Zeichenkette aus einer Modellliste mit Linq holen, aber ich weiß nicht wirklich wie. HierC# - Erhalte die gebräuchlichste Zeichenkette in einer Modellliste

ist einige Beispiel-Code:

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

Stellen Sie sich eine riesige listof ModelClass in der Datenbank gespeichert ist

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

string mostCommonName = ??????? 

Wie würde ich die häufigste aus dieser Liste mit Linq?

Antwort

10

können Sie GroupBy() verwenden, um Strings mit dem gleichen Wert

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

nicht sicher, einfach zu fragen, nicht finden wir Ordnungs Vergleich durchführen müssen? –

+0

Sie können auch 'ToLower()' verwenden (falls der Fall nicht empfindlich ist), um korrekte Ergebnisse zu erhalten. – TestWell

+0

Hallo, das sieht nach der richtigen Antwort aus. Ich kann es aber nicht wirklich zum Laufen bringen, weil ich den Fehler 'can not court quelle '{Key: string, Count: int}' zum Zieltyp 'string' bekomme, wenn ich' mostCommonName' als String und nicht als Var setze . Was ist zu tun? – 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; 
Verwandte Themen