none
Linq where desde otra consulta. RRS feed

  • Pregunta

  • estimados buenas tarde agradeceria su apoyo porfavor.

    mi duda es la siguiente

    necesito hacer una consulta en linq parecida a una que eh realizado en sql

    select SUM(cantidad) 
    from itempedido 
    where PRODUCTO in (select cdproducto from coleccion where pkid = 1)


    la parte del where anidada a una coleccion de resultados no la tengo bien clara quisiera saber como podria hacerla.

    gracias de antemano

    martes, 26 de marzo de 2019 20:53

Todas las respuestas

  • Puedes hacer la consulta más o menos así:

    var resultado = (from i in itempedido
    where coleccion.Where(c => c.pkid == 1).Select(c => c.codproducto).Contains(i.PRODUCTO)
    select i.cantidad).Sum()
    

    Asegúrate de que la colección no es muy grande. Esta sintaxis produce errores cuando hay muchos elementos en la lista sobre la que se aplica el Contains (creo que más de mil, o algo por el estilo).


    martes, 26 de marzo de 2019 22:02
    Moderador
  • hola

    Cuando dices linq es porque tienes esas tablas mapeadas en entity framework ?

    si es asi como se relaciona la entidad "itempedido" con "coleccion" o que vendria a ser esa coleccion

    lo pregunto porque la respuesta cambia segun como tengas las entidades mapeadas en el contexto de EF y de donde provengan los datos

    var codProductos = coleccion.Select(x=> x.cdproducto);
    
    var result = db.ItemPedidos.Where(p => codProductos.Contains(p.Producto)).Sum(p=> p.cantidad);

    en este caso entiendo que "coleccion" es una lista que no esta mapeada en EF, sino que solo se usa para filtrar

    si la coleccion fuera una tabla es muy diferente porque se podria relacionar y filtrar directamente

    es por eso que debes explicarte de forma correcta cuando preguntas

                     

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Carlos_Ruiz_M jueves, 28 de marzo de 2019 16:05
    martes, 26 de marzo de 2019 23:50