2011-12-18 55 views
-3

該函數返回一個包含來自IEnumerable對象的所有鍵名值的字典。我想篩選出不中我的名單,我傳遞存在任何項目。我只想存在的cols.Name屬性LINQ 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)你可能在做一個冗餘的try catch塊,但我不確定你的代碼試圖做什麼。 3)如果出現同名的實例,則重寫值 – 2011-12-18 21:31:38

回答

0

如果我理解正確的問題,嘗試做你的foreach通過:

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

希望這會告訴你爲什麼你的方法是不必要的。