c# - 泛型类型的 Linq 类型转换

标签 c# linq telerik-grid

我找到了这段代码,但即使在我尝试了多次转换之后它也不起作用。基本上,它将数据表巧妙地转换为可序列化的列表。

错误是它无法转换 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/

相关文章:

c# - 如何使用 Unity 注入(inject)我的 dbContext

c# - 如何更改禁用控件的样式?

c# - asp.net UserControl继承,base user control中的web控件都是空指针

c# - 如何使用 Linq 处理带有 FirstOrDefault 的 NULL 对象属性

mongodb - LINQ Select on GroupBy in MongoDB C# driver 2.1

javascript - 如何使用 Kendo 网格获取数据绑定(bind)功能

c# - 防止 XslCompiledTransform 使用自闭合标签

c# - LINQ 按名称选择属性

asp.net-mvc - Telerik MVC 网格 : Ajax DataBinding posts additional parameter?

css - 使 k-checkbox 在 Kendo UI 网格中可见