我得到了这个错误,但我不知道它是什么。我已经找到了答案,但没有人可以回答主要问题,也许我只是错过了一些东西。这是我的代码:
Connection db = new Connection();
public ActionResult Index()
{
ViewBag.query = from input in db.field
where input.ID_FIELD == 1
select new {
type = input.FIELD_TYPE
};
return View();
}
和视角
@foreach (var item in ViewBag.query)
{
@item.type//error here: 'object' does not contain a definition for 'type', why???
}
如果我用where子句做一个简单的选择,那就行了 公共ActionResult索引() {
ViewBag.query = from input in db.field
where input.ID_FIELD == 1
select input.FIELD_TYPE;
return View();
}
可能是我的问题?我似乎很多人都在做同样的事情并且工作得很好,就像我现在做的那样: int [] number = {1,2,3,4,5};
var query = from num in number
let x = num + num + num
select new {avg = x};
foreach (var item in query)
{
Console.WriteLine(item.avg);
}
这里一切都好。为什么会出现问题??
答案 0 :(得分:3)
您无法从方法返回匿名类型。而是创建一个新类型并返回该类型。
例如:
ViewBag.query = from input in db.field
where input.ID_FIELD == 1
select new MyType() {
someField = input.FIELD_TYPE
};
public class MyType
{
public int someField {get;set;}//compatible with whatever type FIELD_TYPE is.
}
答案 1 :(得分:0)
在上一个示例中,您没有使用'item.type'。除此之外,System.Object不包含属性'type'。但是,你可以使用'GetType()' 请参阅here以供参考。
答案 2 :(得分:0)
问题是ViewBag是dynamic
,但是您存储在其中的匿名对象不是,因此编译器无法直接访问其属性。您可以在ViewBag属性中存储一组值,而不是整个查询:
Connection db = new Connection();
public ActionResult Index()
{
ViewBag.types = from input in db.field
where input.ID_FIELD == 1
select input.FIELD_TYPE;
return View();
}
然后
@foreach (var type in ViewBag.types)
{
@type
}