我找到了这个代码,但即使我尝试了很多转换后它也无法运行。 基本上它巧妙地将Datatable转换为可序列化的List。
错误是它无法将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> 。 那可能吗?
I have this code I found but it doesnt work even after i tried many conversions. Basically it converts smartly a Datatable into a List that can be serializable.
The error is that it can't convert a Dictionary<string, object> to a 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 }; }I tried many conversions including:
List<object> newdata = (List<object>)data.AsEnumerable().Cast<object>();Basicaly, the Data property of GridBindingData must have a List<object>. Is that possible?
最满意答案
嗯。 要看到你得到的错误并不容易,但也许你需要.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] }Mmm. It's not easy to see what error you are getting, but perhaps you need .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();Edit this should work flawlessly, tested in the 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] }更多推荐
发布评论