Lak*_*Lai 3 c# linq telerik-grid
我找到了这个代码,但即使我尝试了很多转换后它也无法运行.基本上它巧妙地将Datatable转换为可序列化的List.
错误是它无法将a转换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 };
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多转换,包括:
List<object> newdata = (List<object>)data.AsEnumerable().Cast<object>();
Run Code Online (Sandbox Code Playgroud)
基本上,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();
Run Code Online (Sandbox Code Playgroud)
编辑这应该完美无缺,在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] }
Run Code Online (Sandbox Code Playgroud)