2010-11-30 16 views
5

Estoy intentando mostrar una consulta de unión de línea en una vista web parcial.Consulta de unión de Linq mostrada en la vista de MVC

Aquí es mi consulta dentro de mi controlador:

public ActionResult InactiveUsers() 
     { 
      using (ModelContainer ctn = new ModelContainer()) 
      { 
       DateTime duration = DateTime.Now.AddDays(-3); 

       var inactive = from usrs in ctn.aspnet_Users 
           where usrs.LastActivityDate <= duration 
           join o in ctn.Groups on 
           usrs.UserId equals o.UserID 
           select new 
           { 
            usrs.UserName, 
            usrs.LastActivityDate, 
            o.PrimaryPhoneNumber, 
           }; 

       return View(inactive.ToList()); 
      } 

     } 

Lo que estoy un poco confundido sobre es qué hacer a continuación. Estoy familiarizado con la adición de vistas fuertemente tipadas usando modelos, pero ¿qué sucede en mi caso en el que tengo una consulta de combinación?

Si alguien pudiera señalarme en la dirección correcta, estaría muy agradecido.

Gracias.

Respuesta

3

En lugar de devolver un IEnumerable de tipos anónimos, se podría crear una clase para el resultado unirse y crear un modelo para que lo más normal:

  var inactive = from usrs in ctn.aspnet_Users 
          where usrs.LastActivityDate <= duration 
          join o in ctn.Groups on 
          usrs.UserId equals o.UserID 
          select new InactiveUser(usrs.UserName, usrs.LastActivityDate, o.PrimaryPhoneNumber); 

Con una clase InactiveUser que tiene un constructor que toma una UserName, Date y PhoneNumber.

+0

gracias por su respuesta. Hizo lo que dijo y ahora funciona perfectamente. Gracias :) – 109221793

4

Una solución es utilizar el patrón "ViewModel". En lugar de crear un tipo anónimo, cree un modelo de vista que contenga los datos que desea mostrar. Simplemente rellene eso y páselo a su vista.

Al utilizar este patrón creamos clases inflexible de tipos que son optimizado para nuestro punto de vista específico escenarios, y que exponga las propiedades de los valores dinámicos/contenido necesario por nuestras plantillas de vista. Nuestras clases de controlador pueden llenar y pasar estas clases optimizadas para vista a nuestra plantilla de vista para usar. Esto habilita tipo de seguridad, verificación en tiempo de compilación, y editor intellisense en plantillas de vista .