2012-04-04 9 views
0

Ich baue MVC3 „Code zuerst“ Anwendungen und Daten auf meiner Seite angezeigt Ich verwende die folgenden:
Controller-Code:Zugriff auf IQueryable in Razor?

public ViewResult Index() 
{ 
dynamic assignedT = from t in db.AssignedTasks 

join a in db.Approvers on t.ApproverID equals a.ID 
join r in db.Requestors on t.RequestorID equals r.ID 
select new {Approver =a.FirstName + " " +a.LastName, 
Requestor=r.FirstName + " " + r.LastName, 
Title = t.Title, 
t.RequestedDate, 
t.CompletedDate, t.Description, 
Status =(int)t.InternalStatut 
    }; 

return View(assignedT); 
    } 

und auf der Seite:

@{ 
    ViewBag.Title = "Index"; 
} 
<h2>Index</h2> 
<table> 
    @foreach (var item in Model) {  
<tr> 
    <td>@item.GetType().GetProperty("Title").GetValue(item, null) 
    </td> 
    </tr> 
    } 
</table> 

Ich weiß, dass die Verwendung von dynamischen nicht der beste Weg ist. Wie erreichen Sie die gleiche Funktionalität mit stark typisierten View? Danke

Antwort

1

Sie die folgende Klasse definieren:

public class MyViewModel 
{ 
    string Approver { get; set; } 
    string Requestor { get; set; } 
    string Title { get; set; } 
    DateTime RequestedDate { get; set; } 
    DateTime CompletedDate { get; set; } 
    string Description { get; set; } 
    int Status { get; set; } 
} 

Wenn Sie dann select new Abfrage select new MyViewModel in Ihrer Linq ändern, dann haben Sie eine stark typisierte Viewmodel (und dynamic-var).

+0

ich versuchte, List assignedT = ... zu verwenden, aber Ausnahme wird geworfen. danke – Yuri

+0

Danke @model System.Data.Entity.Infrastructure.DbQuery löste das Problem !!! – Yuri