2
DataRowCollectionをNameValueCollectionに変換するには、エレガントな方法が必要です。DataRowCollectionをNameValueCollectionに変換します。
注:変換中に、私はあなたが行をループする必要があるキー名
DataRowCollectionをNameValueCollectionに変換するには、エレガントな方法が必要です。DataRowCollectionをNameValueCollectionに変換します。
注:変換中に、私はあなたが行をループする必要があるキー名
を整理するためにインフレクタを起動し、手動で必要な列を追加することができますセクションを必要としています。
var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "Hello");
dt.Rows.Add(2, "World");
dt.Rows.Add(1, "Foo"); // dupe key
var nvc = new NameValueCollection();
foreach (DataRow row in dt.Rows)
{
string key = row[0].ToString();
// tidy up key here
nvc.Add(key, row[1].ToString());
}
// display nvc
foreach (var key in nvc.AllKeys)
Console.WriteLine("{0}: {1}", key, nvc[key]);
あなたがToDictionary
を使用することができDictionary
に興味があれば、重複キーが許可されている場合は、しかし、これは動作しません。その場合、別の優雅な解決策はToLookup
を使用することです。
// optionally use a Func to do the tidying up
// or call an existing method or do it inline for simple operations
Func<string, string> tidyFunc = (s) => s.Trim();
var lookup = dt.Rows.Cast<DataRow>()
.ToLookup(r => tidyFunc(r[0].ToString()), r => r[1].ToString());
foreach (var g in lookup)
{
Console.WriteLine("Key: " + g.Key);
foreach (var item in g)
Console.WriteLine(item);
}
こんにちは、ありがとうございました。これが何をしているのか私に教えてくれますか?私はLINQ ToLookupに精通していません(r => tidyFunc(r [0] .ToString())、r => r [1] .ToString()) –
@geocineまず、キャスト結果にLINQ拡張メソッドを使用するには 'IEnumerable 'を取得してください。次に、 'ToLookup'はすべての' DataRow'アイテムを反復し、キーセレクタはラムダ式を使って指定されます。ラムダ式は現在の行を反復で取り出し、それを使ってキーを指定します( 'r => r [0])。 ..部分)。同様に、要素セレクタを使用して余分なデータを指定します( 'r => r [1] ...'の部分)。ルックアップは、キー値とキーに属する要素で構成され、* 1から多くの*ルックアップ構造を提供します。希望が助けてくれる! –
文字列key =行[0] .ToString(); はキーを取得するのではなく、行[0]の値を取得します。どのようにキー名を取得すると思いますか? –