C# 显示 ExpandoObject 的数据 - 无法将 lambda 表达式转换为类型“...”,因为它不是委托
C# show data of ExpandoObject - Cannot convert lambda expression to type '…' because it is not a delegate
我有这个方法:
public ActionResult dataGrid()
{
List<ExpandoObject> list = new List<ExpandoObject>();
using (OdbcCommand DbCommand = repODBC.dbConnection.CreateCommand())
{
DbCommand.CommandText = "Select * From MyTable";
OdbcDataReader reader = DbCommand.ExecuteReader();
while (reader.Read())
{
dynamic obj = new ExpandoObject();
obj.name="Peter";
obj.num=123;
obj.id=1;
list.Add(obj);
}
return View(list);
}
}
我尝试以这种方式访问数据。我使用 Grid.Mvc... :
@Html.Grid((IEnumerable<System.Dynamic.ExpandoObject>)Model).Columns(columns =>
{
columns.Add(m => m.id).Titled("ID");
columns.Add(m => m.name).Titled("Name");
columns.Add(m => m.num).Titled("OS").Filterable(true);
})
但我收到此错误:
无法将 lambda 表达式转换为类型 'GridMvc.Columns.IGridColumn',因为它不是委托
如何向网格添加列以显示 ExpandoObject 的数据?
你不能那样做。 IGridColumnCollection.Add
有一个表达式树作为参数:
IGridColumn<T> Add<TKey>(Expression<Func<T, TKey>> constraint)
dynamic
不能很好地与表达式树 "built by the compiler" 混合("built by the compiler" 我的意思是表达式树不是通过 Expression
class 手动构建的,但是直接在源代码中构建)
(我已经考虑过使用 dynamic
来回答你的其他问题:-))
现在...您可以尝试使用:
columns.Add(m => ((IDictionary<string, object>)m)["id"]).Titled("ID");
(一个 ExpandoObject
实现(私下)接口 IDictionary<string, object>
),但是 50% 它不会工作,你会在运行时得到一个异常。但是你可以试试:-)
我有这个方法:
public ActionResult dataGrid()
{
List<ExpandoObject> list = new List<ExpandoObject>();
using (OdbcCommand DbCommand = repODBC.dbConnection.CreateCommand())
{
DbCommand.CommandText = "Select * From MyTable";
OdbcDataReader reader = DbCommand.ExecuteReader();
while (reader.Read())
{
dynamic obj = new ExpandoObject();
obj.name="Peter";
obj.num=123;
obj.id=1;
list.Add(obj);
}
return View(list);
}
}
我尝试以这种方式访问数据。我使用 Grid.Mvc... :
@Html.Grid((IEnumerable<System.Dynamic.ExpandoObject>)Model).Columns(columns =>
{
columns.Add(m => m.id).Titled("ID");
columns.Add(m => m.name).Titled("Name");
columns.Add(m => m.num).Titled("OS").Filterable(true);
})
但我收到此错误: 无法将 lambda 表达式转换为类型 'GridMvc.Columns.IGridColumn',因为它不是委托
如何向网格添加列以显示 ExpandoObject 的数据?
你不能那样做。 IGridColumnCollection.Add
有一个表达式树作为参数:
IGridColumn<T> Add<TKey>(Expression<Func<T, TKey>> constraint)
dynamic
不能很好地与表达式树 "built by the compiler" 混合("built by the compiler" 我的意思是表达式树不是通过 Expression
class 手动构建的,但是直接在源代码中构建)
(我已经考虑过使用 dynamic
来回答你的其他问题:-))
现在...您可以尝试使用:
columns.Add(m => ((IDictionary<string, object>)m)["id"]).Titled("ID");
(一个 ExpandoObject
实现(私下)接口 IDictionary<string, object>
),但是 50% 它不会工作,你会在运行时得到一个异常。但是你可以试试:-)