2009-03-09 17 views
190

Farklı değerler almak için LINQ kullanarak sorgulamak istediğim bir MyClass koleksiyonum var ve sonuç olarak bir Dictionary dizgi, string> geri aldım ancak Bunu, aşağıda yaptığımdan daha kolay nasıl yapabileceğimi anlayamıyorum. Sözlük < dizesini almak için kullanabileceğim daha temiz bir kod ne olurdu?LINQ sorgusu bir Sözlük döndürür <string, string>

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 

var queryResults = (from MyClass mc in myClassCollection 
        orderby bp.SomePropToSortOn 
        select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct(); 

foreach (var item in queryResults) 
{ 
    desiredResults.Add(item.Key.ToString(), item.Value.ToString()); 
} 
+5

Yinelenen tuşlarla ne yapmak istersiniz? İlkini al ve sonrakileri görmezden gel? Sözlüklerin sipariş edilmediğinin farkında olun, bu yüzden sorgunuzda siparişinizin hiçbir etkisi olmayacaktır ... –

+1

Belki de aradığınız şey, IDictionary'ın SortedDictionary uygulamasıdır. Aksi halde bir Sözlük üzerinden sıralama anlamsızdır. – Fede

cevap

318

ToDictionary yöntemini doğrudan kullanın. ToLookup ve/veya ToDictionary uzatma yöntemlerine

var result = 
    // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
    // show how to use OrderBy in a LINQ query 
    myClassCollection.OrderBy(mc => mc.SomePropToSortOn) 
        .ToDictionary(mc => mc.KeyProp.ToString(), 
           mc => mc.ValueProp.ToString(), 
           StringComparer.OrdinalIgnoreCase); 
+1

Mehrdad, bunun üzerindeki işaret için teşekkürler. Bu benim girdiğim yönündeydi, ama için ToDictionary'ın doğru aşırı yüküne bakmış olmalı. –

İlgili konular