2011-05-21 100 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