1

有人能告诉我为什么这个 ViewBag 不想呈现它的值吗?

ViewBag.fields = from f in db.Fields
                    where f.FieldId == id
                    select new { name = f.Name, id = f.FieldId };

@foreach(var item in  ViewBag.fields)
{
@item.name//error, cannot find the definition of name
}

我也试过这个。

@foreach(var item in  ViewBag.fields)
{
@item[0]//error, 'object' does not contain a definition for 'name'
}

但是,如果这样做

@foreach(var item in ViewBag.fields)
{
@item 
}

它呈现

{name = Document, id=1}

我需要做什么?

4

1 回答 1

1

nemesv 的链接解释了为什么这不起作用,您基本上被迫创建命名类型而不是使用匿名类型。您可以使用元组,但您必须先将结果转换为 IEnumerable,因为 Linq to Entities 不能使用构造函数参数。

所以要么创建一个类型来传输数据,要么这样做:

ViewBag.fields = (from f in db.Fields
                where f.FieldId == id
                select new { name = f.Name, id = f.FieldId })
                .AsEnumerable()
                .Select(x => new Tuple<string, int>(x.name, x.id);

然后在视野中

@foreach(var item in ViewBag.fields)
{
    item.Item1
}
于 2013-05-03T16:43:01.070 回答