2011-05-21 12 views
5

Parece que debería ser tan fácil, pero he intentado tres o cuatro formas de hacerlo (pero fue en vano).Pasar los resultados de la consulta en un viewbag

Estoy tratando de poner un resultado de consulta en una bolsa de visualización y mostrarla.

He intentado poner una lista de objetos en un modelo de ViewBag:

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

Y entonces trato de escupir en un .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 /> 
} 

Pero dice:

Cannot convert type 'System.Data.Entity.Infrastructure.DbQuery' to 'System.Collections.Generic.List'

Parece que estoy utilizando una plantilla incorrecta. ¿Cómo escupo un System.Entity.Infrastructure.DbQuery?

También intenté pasar los resultados a través del Viewbag como una lista de cadenas. (¿Es una peor manera de hacerlo?)

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

Y escupir como una lista de cadenas:

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

Y conseguir esto:

Object reference not set to an instance of an object.

y apunta a la palabra clave "foreach".

¿Eso significa que no hubo mensajes? ¿O que?

¡Ojalá hubiera un tutorial que mostrara cómo poner resultados de consulta en un ViewBag y cómo sacarlos! He visto tutoriales que devuelven un object.ToList() sin importar ningún tipo de mecanismo "where", pero no hay ejemplos para extraer algunas entradas relevantes y mostrarlas.

Respuesta

6

Trate

ViewBag.messages = MSG.ToList(); 

Además, System.Data.Entity.Infrastructure.DbQuery implementa IEnumerable (http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbquery(v=vs.103).aspx) así que esto también debería funcionar:

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

impresionante. ¡Gracias! – micahhoover

+0

Por alguna razón, cuando usé esta línea: "ViewBag.messages = mesg.ToList();" Obtuve este error: "LINQ to Entities no reconoce el método 'System.String ToString()', y este método no se puede traducir a una expresión de tienda". – micahhoover

+0

Veo este error cuando hago "seleccionar MSG" y "seleccionar MSG.mesg". También recibí este error cuando hice esto: "ViewBag.messages = mesg.ToString();" (en lugar de ToList()). – micahhoover

Cuestiones relacionadas