Sözlük döndürmek için LINQ sorgusu <string, string>


218

Farklı değerler elde etmek ve sonuç olarak bir Sözlük <dize, dize> geri almak için LINQ kullanarak sorgulamak istiyorum MyClass bir koleksiyon var, ama nasıl daha basit herhangi bir şey yapabilirim anlayamıyorum Aşağıda yapıyorum. Sonuç olarak Dictionary <string, string> almak için kullanabileceğim bazı temiz kodlar ne olurdu?

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());
}

6
Yinelenen anahtarlarla ne yapmasını istiyorsunuz? Sadece ilkini al ve sonra gelenleri görmezden gel? Sözlüklerin sipariş edilmediğini unutmayın, bu nedenle sorgudaki siparişinizin hiçbir etkisi olmayacaktır ...
Jon Skeet

1
Belki de aradığınız şey IDictionary SortedDictionary uygulamasıdır. Aksi takdirde bir Sözlük üzerindeki sıralama anlamsızdır.
Fede

Yanıtlar:


367

ToDictionaryYöntemi doğrudan kullanın .

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, bu konudaki gösterici için teşekkürler. Bu ben giriyordum yön, ama ToDictionary doğru aşırı bakan bakan olmalı.
Scott Ivey

18

Bak ToLookupve / veya ToDictionaryuzatma yöntemlerine.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.