2011-12-18 16 views
-3

この関数は、IEnumerableオブジェクトからのすべてのキー名の値を含む辞書を返します。私は渡しています私のリストに存在しない任意の項目を除外したい。私が正しく質問を理解していれば、あなたのforeachのをやってみてください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)同じ名前のインスタンスが発生した場合は、値を上書きします。 –

答えて

0

私はちょうどcols.Nameとして存在するプロパティをしたいですスルー:

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

これは、あなたの方法が不要な理由を示しています。

関連する問題