Max*_*mus 31 c# linq datatable dictionary enumerable
我想知道如何将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));
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
System.Data.EnumerableRowCollection不包含'ToDictionary'的定义和最佳扩展方法重载'System.Linq.Parallel.Enumerable.ToDictionary(System.Linq.ParallelQuery,System.Func,System.Collections.Generic.IEqualityComrparer)'有一些无效的争论
我该如何解决这个问题?
谢谢
cad*_*ll0 72
通用方法ToDictionary有3个参数.你离开了一个,所以它不知道该怎么做.如果要指定所有参数,它将是<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));
}
Run Code Online (Sandbox Code Playgroud)
当然,如果你把它们关掉,编译器就能推断出类型,所以你不会得到错误.
Par*_*Par 14
所有普遍的答案都没有帮助我,所以我这样做了:
myList = dt.AsEnumerable()
.ToDictionary<DataRow, string, string>(row => row[0].ToString(),
row => row[1].ToString());
Run Code Online (Sandbox Code Playgroud)
它工作得很好!
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));
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方法:
public static List<Dictionary<string, string>> GetDataTableDictionaryList(DataTable dt)
{
return dt.AsEnumerable().Select(
row => dt.Columns.Cast<DataColumn>().ToDictionary(
column => column.ColumnName,
column => row[column].ToString()
)).ToList();
}
Run Code Online (Sandbox Code Playgroud)
原因是因为此代码还可以通过调用ToString方法来处理布尔值或其他数据类型。
请注意,这将返回字典列表,如果每行都有键,则可以将其修改为字典字典。
遍历布尔列可能看起来像这样:
var list = GetDataTableDictionaryList(dt);
foreach (var row in list)
{
if (row["Selected"].Equals("true", StringComparison.OrdinalIgnoreCase))
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67110 次 |
| 最近记录: |