在viewbag中传递查询结果

时间:2011-05-21 09:08:48

标签: entity-framework asp.net-mvc-3 ef-code-first

这看起来应该很容易,但我已经尝试过三到四种方法(但无济于事)。

我只是想将查询结果放在一个视图包中并显示它。

我尝试在ViewBag中放置一个模型对象列表:

var mesg = from MSG in lemondb.Messages
where MSG.msg == Membership.GetUser().ToString()
select MSG;
ViewBag.messages = MSG;

然后我尝试用.cshtml吐出来:

var message = (List<LemonTrader.Models.Message>)ViewBag.messages;  // <--- fails here because it is a string
foreach ( var MSG in message )
{
@Html.Label(MSG.msg)<br />
}

但它说:

  

无法转换类型   'System.Data.Entity.Infrastructure.DbQuery'   至   'System.Collections.Generic.List'

所以我似乎正在使用错误的模板。我如何吐出System.Entity.Infrastructure.DbQuery?

我也尝试将结果作为字符串列表通过Viewbag传递。 (这是一种更糟糕的方式吗?)

var mesg = from MSG in lemondb.Messages
where MSG.msg == Membership.GetUser().ToString()
select MSG.msg;
ViewBag.messages = mesg;

并将其作为字符串列表吐出:

foreach (var atext in ViewBag.messages as List<string>) { // gets hung up on foreach here (why???)
    @Html.Label( atext )   
}

我明白了:

  

对象引用未设置为   对象的实例。

它指向“foreach”关键字。

这是否意味着没有消息?或者是什么?

我希望有一个教程展示如何在ViewBag中放置查询结果以及如何将它们删除!我已经看过返回object.ToList()的教程,不考虑任何类型的“where”机制,但是没有示例可以提取一些相关的条目并显示它们。

1 个答案:

答案 0 :(得分:6)

尝试

ViewBag.messages = MSG.ToList();

另外,System.Data.Entity.Infrastructure.DbQuery实现IEnumerable(http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbquery(v=vs.103).aspx),所以这也应该有效:

var message = (IEnumerable<LemonTrader.Models.Message>)ViewBag.messages;