2011-03-05 17 views
16

Tengo dos tablas: Projects y ProjectsData y quiero ejecutar la consulta con join y obtener el resultado en la Vista.Obtener datos de dos tablas (unir) con linq y devolver el resultado a la vista

En el controlador que tienen este código:

ViewBag.projectsData = (from pd in db.ProjectsData 
            join p in db.Projects on pd.ProjectId equals p.ID 
            where pd.UserName == this.HttpContext.User.Identity.Name 
            orderby p.Name, p.ProjectNo 
            select new { ProjectData = pd, Project = p }); 

Lo que debería utilizar en la vista para extraer estos datos. He intentado que:

@foreach (var item in ViewBag.projectsData) 
{ 
    @item.pd.UserName 
} 

pero no funciona ...

Respuesta

39

En su opinión que está intentando acceder a una propiedad pd pero dicha propiedad no existe. La propiedad se llama ProjectData.

Dicho esto, le recomiendo encarecidamente que utilice los modelos de vista y vistas fuertemente tipadas en lugar de ViewBag. De esta manera, también obtendrá Intellisense en su vista que le habría ayudado a elegir los nombres correctos.

por lo que podría empezar por definir un modelo de vista que contendrá toda la información de su vista necesitaría:

public class MyViewModel 
{ 
    public ProjectData ProjectData { get; set; } 
    public Project Project { get; set; } 
} 

y luego dentro de la acción del controlador poblar esta vista del modelo y pasar a la vista:

public ActionResult Index() 
{ 
    var viewModel = 
     from pd in db.ProjectsData 
     join p in db.Projects on pd.ProjectId equals p.ID 
     where pd.UserName == this.HttpContext.User.Identity.Name 
     orderby p.Name, p.ProjectNo 
     select new MyViewModel { ProjectData = pd, Project = p }; 
    return View(viewModel); 
} 

y finalmente dentro de la vista inflexible utilizar la vista del modelo:

@model IEnumerable<AppName.Models.MyViewModel> 
@foreach (var item in Model) 
{ 
    <div>@item.ProjectData.UserName</div> 
} 
+0

Gracias. Esto me ayudó a ver el modelo también. De modo que puedo mostrar dos datos de tabla en una vista parcial y mostrar esa vista en otra tabla de base de datos Vista. –

+0

Lo hice de la misma manera, pero recibí una excepción: [InvalidOperationException: el elemento del modelo pasado al diccionario es del tipo 'System.Linq.Enumerable + d__37'4 [<> f__AnonymousType7'2 [Subasta, ganador] , Auctioneer, Int32, <> f__AnonymousType8'5 [String, DateTime, Decimal, String, String]] ', pero este diccionario requiere un elemento de modelo de tipo' System.Collections.Generic.IEnumerable'1 [TeAwaOnlineArtworkAuction.Entities.AuctionWinner] '.] – VincentZHANG

+0

Recibo el mismo error (@VincentZHANG) – Negar

Cuestiones relacionadas