2011-12-18 7 views
-3

Эта функция возвращает словарь со всеми значениями имени ключа, исходящими от объекта IEnumerable. Я хочу, чтобы отфильтровать все элементы, которые не существуют в моем списке, который я передаю. Я просто хочу, свойства, которые существуют как cols.NameLINQ IEnumerable и List

public static Dictionary<string, string> GetDataRowFromObject(IEnumerable<NameValue<string, object>> properties, List<ColDefModel> cols) 
    { 
     var dataRow = new Dictionary<string, string>(); 
     foreach (NameValue<string, object> property in properties) 
     { 
      try 
      { 
       if (property.Value == null) 
        dataRow[property.Name] = ""; 
       else 
        dataRow[property.Name] = property.Value.ToString(); 
      } 
      catch (NullReferenceException e) 
      { 
       dataRow[property.Name] = ""; 
      } 
     } 
     return dataRow; 
    } 
+0

1) Вы передаете параметр, который вы никогда не используете. 2) Вероятно, вы делаете избыточный блок catch try, но я не могу быть уверен, что ваш код пытается сделать. 3) Вы являетесь главными значениями, если происходит экземпляр с тем же именем –

ответ

0

Если я правильно понял вопрос правильно, попробуйте сделать свой Еогеасп до:

properties.Where(x => cols.Any(y => x.Name == y.Name)) 

вместо properties. Если производительность является проблемой, попробуйте сделать какой-то хешированный список имен в cols (например, HashSet); скажем, это называется colNames, затем измените приведенное выше на x => colNames.ContainsKey(x.Name).

2
var dictionary = properties.Where(nv => nv.Value != null) 
          .Where(nv => cols.Any(c => c.ColName == nv.Name)) 
          .ToDictionary(nv => nv.Name, nv => nv.Value.ToString()); 

Надеюсь, это покажет вам, почему ваш метод не нужен.

Смежные вопросы