Linq

2016-04-07 25 views
1

için alternatif ve varsa, aşağıdaki kod için gelişmiş bir LINQ olabilir. Kodum, başka bir sözlükteki nesnelerin bir listesini almak ve sonra bu nesne listesine döngü yapmak için bir dize (anahtar), dize (değer) sözlüğü hazırlamaya çalışıyor.Linq

Dictionary<string, string> displayNames = new Dictionary<string, string>(); 
List<DefDefaultDataSet.dbEnumsRow> enumList; 

//allEnums dictionary: Key as string and value as List<DefDefaultDataSet.dbEnumsRow> 
//enumID is a string object 
if (allEnums.TryGetValue(enumID, out enumList)) 
{ 
    foreach (DefDefaultDataSet.dbEnumsRow row in enumList) 
    { 
     string enumValue = row.Value; 
     //If already have enumvalue ,no need to add again 
     if (!string.IsNullOrWhiteSpace(enumValue) && !displayNames.ContainsKey(enumValue)) 
     { 
      displayNames.Add(enumValue, FindResourceVal(row.ResourceKey, uniqueKey)); 
     } 
    } 
} 
+0

mu kodunuzu işi? Bu site başka bir yere sormayı düşünürse, bu site – TheLethalCoder

+0

çalışmıyor kod ile ilgili sorunlar için Evet, işe yarıyor. –

+0

Bazı örnek veriler sağlayabilir misiniz? Bana 'ToDictionary()' yi kullanabileceğinizi, ancak tüm şeyi (artı veri) görmeden kodunuz hakkında akıl yürütmek zor olduğunu düşünüyorum. –

cevap

0

Daha sonra Where kullanarak filtreler, if deyimi tutmak ve ToDictinary kullanarak sözlüğü oluşturabilirsiniz:

if (allEnums.TryGetValue(enumID, out enumList)) 
    displayNames = enumList.Where(e => !string.IsNullOrWhiteSpace(e.Value) && !displayNames.ContainsKey(e.Value)) 
          .ToDictionary(k => k.ResourceKey, v => FindResourceVal(v.ResourceKey, uniqueKey));