获取datacontext.ExecuteQuery返回的动态对象的属性

时间:2012-09-12 17:38:13

标签: c# sql asp.net-mvc asp.net-mvc-3 model-view-controller

我正在尝试从db获取数据。

我的控制器代码:

var data = datacontext.executequery<dynamic>("select id, name from sometable");
return View(data);

我的观看代码:

@model IEnumerable<dynamic>

@foreach(var item in Model)
{
@item.name
}

所以当我运行它时我会收到错误 'object'不包含'name'的定义

1 个答案:

答案 0 :(得分:2)

这没有工作的业务,因为当您告诉LINQ to SQL执行datacontext.executequery<dynamic>时,您实际上是在告诉它执行datacontext.executequery<object>

因此,您的查询返回的所有内容都是object类型。

原因是返回类型的映射是通过使用反射检查在编译类型传递的T来实现的,并且因为你传递了 dynamic ,所以在编译时它等同于对象

如果你真的想做类似的事情(动态API),你可能想看看Dapper - http://code.google.com/p/dapper-dot-net/