none
Problema en consulta con relaciones n,m RRS feed

  • Pregunta

  • Hola,

    tengo dos tablas en la BBDD: PRODUCTO (con PK idprod) y MATERIAL (con PK idmat) relacionadas mediante otra tercera tabla (ProductoMaterial) que tiene los campos idprod e idmat para tener una relación n, m

    Por otro lado tengo un EntityData Model (Entity Framework 4.1) que contiene estas tablas, y las relaciones aparecen como propiedades de navegación, en la entidad PRODUCTO como MATERIALES y en la entidad MATERIAL como PRODUCTO.

    Lo que quiero es obtener los materiales de un producto en una lista de objetos (DTOmaterial) que tiene exactamente las mismas propiedades que el que existe en el EntityData Model.

    Para obtener los materiales de un producto uso la siguiente consulta:

    var mat = from p in miContext.PRODUCTO
                     where P.Idprod == miParametro
                     select p.MATERIALES;

    El problema lo tengo cuando intento obtener una List<DTOmaterial> a partir de "materiales".

    He probado usando AutoMapper sin éxito, y también intentando llenar la lista en un bucle sin conseguirlo.

    ¿Cómo puedo hacer para obtener esta lista?

    martes, 2 de diciembre de 2014 7:35

Todas las respuestas

  • Hola,

    había enviado este mensaje al foro Entity Framework, pero creo que ahora es más adecuado que esté en este.

    A partir de una respuesta de un post, he conseguido que me funcione, incluso el AutoMapper. La sentencia de la que he partido para hacerlo es esta:

    var q = context.B.Where(p => p.A.Any(c => c.ID == 3)).ToList();

    Donde B se corresponde con MATERIAL y A con PRODUCTO.

    Lo que me gustaría saber, si es posible, es como hacer esta misma consulta en LINQ, es decir, sin usar expresiones Lambda.

    Un saludo y gracias anticipadas por la posible ayuda que me puedan prestar.

    martes, 2 de diciembre de 2014 7:40
  • hola

    que tipo de relacion hay entre B y A ? es una relacion muchos a muchos

    es una lista la propiedad A que defines dentro de la clase B?


    no intentaste usando

    var producto = miContext.PRODUCTO.FirstOrDefault(p=> p.Idprod == miParametro);

    var mat = producto.MATERIALES;

    porque entiendo localizas un unico producto, y de este obtiene los materiales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de diciembre de 2014 11:29
  • Hola, como indico en el título del post, la relación es m,n o muchos a muchos

    Se trata de obtener una lista de objetos DTO "List<DTOmaterial>" de materiales a partir del ID de un producto.

    Como digo en el segundo mensaje, he conseguido hacerlo utilizando expresiones lambda.

    Mi pregunta ahora es saber si eso mismo: "var q = context.B.Where(p => p.A.Any(c => c.ID == 3)).ToList();"

    se puede hacer con linq sin usar lambdas.

    martes, 2 de diciembre de 2014 13:39