Primero estoy usando la base de datos de entity framework.

Para una relación de uno a muchos, en el servidor SQL, utilizo la siguiente consulta SQL (Status_ID es una clave externa):

SELECT Products.*, Status.Title as Pstatus
FROM Products, Status 
WHERE Products.Status_ID = Status.ID

En MVC, uso el siguiente código para recuperar los mismos datos que la consulta SQL anterior y pasar la lista a la Vista:

Controlador:

var products = oDB.Products.Include(m => m.Status)
                       .ToList();
// string test = products[0].Status.Title;
return View(products);

En la vista puedo acceder a los datos deseados mediante el siguiente código:

Vista:

@model List<myDB.Product>
...
@item.Status.Title // This works well for each item in the list

Para MUCHAS O MUCHAS RELACIONES CON LA TABLA DE CONEXIONES, este es mi .edmx:

enter image description here

Ahora, ¿cómo puedo recuperar la lista de productos que incluyen categorías relacionadas? Necesito la lista de productos y la paso a la vista como una lista, y accedo a las categorías de cada producto en la vista.

Mis clases (estas clases se generan automáticamente):

public partial class Category
{
    public int ID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Products_Categories> Products_Categories { get; set; }
}

public partial class Products_Categories
{
    public int ID { get; set; }
    public Nullable<int> Product_ID { get; set; }
    public Nullable<int> Category_ID { get; set; }
    public virtual Category Category { get; set; }
    public virtual Product Product { get; set; }
}

public partial class Product
{
    public int ID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Products_Categories> Products_Categories { get; set; }
}
0
Muhamad Jafarnejad 13 dic. 2016 a las 11:56

2 respuestas

La mejor respuesta
var products = oDB.Products.Include(m => m.Product_Categories.Select(pc=>pc.Category))
                       .ToList();
// string test = products[0].Status.Title;
return View(products);

Y en una vista podrías usarlo así

@foreach(var item in model){ 
   <h3>string.join(", ", item.Product_Categories.Select(pc=>pc.Category.Title))</h3> 
}
3
Alexander Taran 13 dic. 2016 a las 19:08

Necesitas usar algo como esto:

var products = oDB.Products.Include("Status")
                   .ToList();
// string test = products[0].Status.Title;
return View(products);
1
Mihai Alexandru-Ionut 13 dic. 2016 a las 09:40