42

DataTable を Dictionary に変換する方法を知りたいです。私はこのようなことをしました。

using System.Linq;

internal Dictionary<string,object> GetDict(DataTable dt)
{
    return dt.AsEnumerable()
      .ToDictionary<string, object>(row => row.Field<string>(0),
                                row => row.Field<object>(1));
}

しかし、私は得る:

System.Data.EnumerableRowCollection には、'ToDictionary' と最適な拡張メソッド オーバーロード 'System.Linq.Parallel.Enumerable.ToDictionary(System.Linq.ParallelQuery, System.Func, System.Collections.Generic.IEqualityComrparer)' の定義が含まれていません。いくつかの無効な引数があります

どうすればこれを解決できますか?

ありがとう

4

8 に答える 8

95

ジェネリック メソッドToDictionaryには 3 つのパラメーターがあります。あなたが 1 つを中断したため、何をすべきかわかりません。すべてのパラメーターを指定する場合は、 になります<DataRow, string, object>

internal Dictionary<string,object> GetDict(DataTable dt)
{
    return dt.AsEnumerable()
      .ToDictionary<DataRow, string, object>(row => row.Field<string>(0),
                                row => row.Field<object>(1));
}

もちろん、それらを省略した場合、コンパイラは型を推測できるため、エラーは発生しません。

于 2013-10-31T17:44:06.717 に答える
18

以前の回答はすべて役に立たなかったので、次のようにしました。

myList = dt.AsEnumerable()
.ToDictionary<DataRow, string, string>(row => row[0].ToString(),
                                       row => row[1].ToString()); 

そしてそれはうまくいきました!

于 2014-03-06T09:46:14.920 に答える
9

ToDictionary はIEnumberable<T>最初のタイプとして を期待しています...間違っている文字列だと言っていたIEnumerable<DataRow>

タイプを指定すると混乱します...これを試してください...

internal Dictionary<string,object> GetDict(DataTable dt)
{
    return dt.AsEnumerable()
      .ToDictionary(row => row.Field<string>(0),
                                row => row.Field<object>(1));
}
于 2013-10-31T17:42:00.503 に答える
2

私はこれがあなたを助けると思います:

            DataTable dt = new DataTable();
            dt.Columns.Add("Column1");
            dt.Columns.Add("Column2");
            dt.Rows.Add(1, "first");
            dt.Rows.Add(2, "second");
            var dictionary = dt.Rows.OfType<DataRow>().ToDictionary(d => d.Field<string>(0), v => v.Field<object>(1));
于 2013-10-31T17:43:24.797 に答える