2012-02-07 10 views
0

以下のLINQ式を使用してデータテーブルを作成しようとしていますが、これは問題なく動作しますが、ハックのように感じます。これを行うより良い方法はありますか? LINQ式の実行

var Records = <Dictionary object with some data.> 

DataTable objDataTable = null; 
objDataTable.Columns.Add("Column1", typeof (string)); 
objDataTable.Columns.Add("Column2", typeof (string)); 

// Have to perform .Count() to execute the linq expression in order to 
// add datarows in datatable 

Records.Keys.Select(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]})).Count(); 

私は文を実行するために、最後に.Count()までに持っている上に、あなたが見ることができるように

。先に私は .ToArray()をやっていたが、私は .Count()が安くなると思った。

いずれにしても、これはあまり読みにくくはありません。

+0

[LINQ-Queryをすぐに実行する最も簡単な方法は何ですか](http://stackoverflow.com/questions/9010639/what-is-the-cheapest-way-to-execute-a-linq -query-immediately) - 類似点は印象的です... –

+0

:)はいthey are – Zeus

答えて

3

はい - だけ完璧に読めるし、このために適したforeachループを使用します - 特にあなた LINQのは、あなたが常にがそうすることを強要されなければならないという意味ではありません使用することができるからといって

foreach(var rec in Records.Keys) 
{ 
    objDataTable.Rows.Add(new object[] {rec, Records[rec]}); 
} 

を副作用のあるコードがある場合

+0

これは私のデフォルトの実装でした。利用可能なものがあるかどうかを確認しようとしていました。 – Zeus

1

代わりForEachを使用してください:あなたは常にあなたが反復処理の各キーの値を調べるよう

Records.Keys.ForEach(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]})); 
+0

その辞書 ...私がForEachをキーでこのように実行することを許可しない – Zeus

0

を見て、私はちょうど辞書自体を列挙言うと思います:ここで

foreach(var kvp in Records) 
{ 
    objDataTable.Rows.Add(new object[] {kvp.Key, kvp.Value}); 
} 

kvpKeyValuePair<string, string>です。私の目には、のエントリを辞書に入れて何かしたいことが明確になります。