2015-07-08 16 views
6

Linq kullanarak bir model listesinden en sık kullanılan dizeyi almak istiyorum, ancak gerçekten nasıl olduğunu bilmiyorum.C# - Model listesinde en yaygın dizeyi alın

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

ModelClass

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

string mostCommonName = ??????? 

nasıl linq kullanarak bu listeden en yaygın isim bulur veritabanında saklanır büyük listof düşünün: İşte

bazı örnek kodudur?

cevap

10

Sen

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

emin, sadece soruyorum biz sıralı karSIlaStIrmasInI gerçekleştirmek için ihtiyacım yok aynı değere sahip dizeleri bulmak için GroupBy() kullanabilir? –

+0

Ayrıca, doğru sonuçları döndürmek için ToLower() 'da (eğer durum hassas değilse) kullanabilirsiniz. – TestWell

+0

Merhaba, bu doğru cevap gibi görünüyor. Gerçekten işe yaramazsa, çünkü '' MostCommonName '' i bir dize olarak değil, bir değişken olarak ayarlıyorumsa, 'source' {Key: string, Count: int} 'türünü' string 'olarak değiştiremiyorum. . Ne yapalım? – 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; 
İlgili konular