2011-05-21 30 views
5

这似乎应该是如此简单,但我已经尝试过三种或四种方法来做到这一点(但无济于事)。在查看包中传递查询结果

我只是试图把查询结果放入一个viewbag并显示它。

我已经试过投入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 /> 
} 

但它说:

Cannot convert type 'System.Data.Entity.Infrastructure.DbQuery' to '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) 
} 

而且我得到这个:

Object reference not set to an instance of an object.

它在点“foreach”关键字。

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

我希望有一个教程展示如何将查询结果放入ViewBag以及如何将它们取出!我见过的教程返回一个object.ToList()而不考虑任何种类的“where”机制,但没有示例来提取一些相关条目并显示它们。

回答

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; 
+0

真棒。谢谢! – micahhoover 2011-05-21 16:17:17

+0

出于某种原因,当我使用这一行:“ViewBag.messages = mesg.ToList();”我得到这个错误:“LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式。” – micahhoover 2011-05-26 07:12:53

+0

我在“选择味精”和“选择MSG.mesg”时看到此错误。当我这样做时也得到这个错误:“ViewBag.messages = mesg.ToString();” (而不是ToList())。 – micahhoover 2011-05-26 07:26:46