我找到了这段代码,但即使在我尝试了多次转换之后它也不起作用。基本上,它将数据表巧妙地转换为可序列化的列表。
错误是它无法转换 Dictionary<string, object>
到 List<object>
:
public GridBindingData GetSomething() {
DataTable dt = GetDatatable();
var columns = dt.Columns.Cast<System.Data.DataColumn>();
var data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.ToList<object>();
return new GridBindingData() { Data = data , Count = dt.Rows.Count };
}
我尝试了很多转换,包括:
List<object> newdata = (List<object>)data.AsEnumerable().Cast<object>();
基本上,GridBindingData 的 Data 属性必须有一个 List<object>
.这可能吗?
最佳答案
嗯。很难看出您遇到了什么错误,但也许您需要 .Cast<object>().ToList()
:
var data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.Cast<object>()
.ToList();
编辑 这应该可以完美地工作,在 REPL 中测试过:
csharp> new Dictionary<string, string> { {"key","value"} }.ToList().Cast<object>();
{ [key, value] }
csharp> new Dictionary<string, string> { {"key","value"} }.Cast<object>().ToList();
{ [key, value] }
关于c# - 泛型类型的 Linq 类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204930/