2011-05-21 22 views
5

Bu çok kolay olmalı, ancak bunu yapmak için üç veya dört yol denedim (ama boşuna).Bir sorgulamada sonuçların geçilmesi

Sadece bir viewbag'e bir sorgu sonucu koyup görüntülemeye çalışıyorum.

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

Sonra bir .cshtml bunu tükürmek deneyin:

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 /> 
} 

Ama diyor ki:

Bir ViewBag bir model nesne listesi koyarak denedim

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

Yani yanlış şablonu kullanarak kullanıyorum gibi görünüyor. System.Entity.Infrastructure.DbQuery'yi nasıl ekerim?

Ayrıca sonuçları Viewbag üzerinden dizelerin bir listesi olarak aktarmayı denedim.

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

(? Kötü bir şekilde yapmak mı) Ve bir dize listesi olarak tükürerek dışarı:

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

Ve bu olsun:

Object reference not set to an instance of an object.

Ve işaret "foreach" anahtar kelimesi.

Bu, mesaj olmadığı anlamına mı geliyor? Ya da ne?

Bir ViewBag'da sorgu geri bildirimlerinin nasıl koyulacağını ve nasıl alınacağını gösteren bir eğitim dilekçesi olmasını diliyorum! Herhangi bir "nerede" mekanizmasına saygı göstermeden bir object.ToList() döndüren öğreticiler gördüm, ancak birkaç tane ilgili girdiyi çıkarmak ve görüntülemek için hiçbir örnek yok.

cevap

6

System.Data.Entity.Infrastructure.DbQuery IEnumerable (http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbquery(v=vs.103).aspx) uygulayan bu nedenle bu da çalışması gerekir, ayrıca

ViewBag.messages = MSG.ToList(); 

deneyin:

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

Muhteşem. Teşekkürler! – micahhoover

+0

Herhangi bir nedenle, bu satırı kullandığımda: "ViewBag.messages = mesg.ToList();" Bu hatayı aldım: "Varlıklar için LINQ, 'System.String ToString()' yöntemini tanımıyor ve bu yöntem bir mağaza ifadesine dönüştürülemiyor." – micahhoover

+0

"MSG" yi ve "MSG.mesg" yi seçtiğimde bu hatayı görüyorum. Bunu yaptığımda da bu hatayı aldım: "ViewBag.messages = mesg.ToString();" (ToList() yerine). – micahhoover

İlgili konular