none
EF, multiples includes, filtro por los campos incluidos y patron Specification RRS feed

  • Pregunta

  • Buenas,

    Estoy usando EF 6.0 y los patrones de Entidad y Especificación que propone Unai Zorrilla en el libro "Arquitectura N-Capas DDD .NET 4.0" (http://geeks.ms/blogs/unai/archive/2010/03/24/microsoft-ddd-n-layer-net-4-0-los-materiales.aspx)

    El problema ha aparecido cuando he querido hacer filtros en las Entidades incluidas. Es decir, si yo tengo [Factura] y [FacturaDetalle], quisiera poder hacer una búsqueda de las Facturas que cumplieran la especificación ubicada en el detalle.

    Me quedo aquí:

    System.Data.Entity.DbSet<Factura> set = (System.Data.Entity.DbSet<Factura>)GetSet<Factura>();

    var facturas = set
                    .Include(f => f.Lineas)
                    .Where(facturaSpecification.SatisfiedBy());

    He intentado añadiendo:

    facturas = (from factura in facturas
                select new {
                    factura,
                    lineas = from linea in facturas.Lineas
                             where lineaSpecification.SatisfiedBy() //No cumple, espera bool
                             select linea
                }).AsEnumerable().Select(a => a.factura);

    o reemplazando por

    var facturas = set
                    .Include(g => g.Lineas)
                    .Where(facturaSpecification.SatisfiedBy())
                    .Where(f => f.Lineas.Where(sampleSpecification.SatisfiedBy())); //No cumple. Devuelve un enumerado

    Tipo que devuelve el método SatisfiedBy()

    lineaSpecification.SatisfiedBy() devuelve System.Linq.Expressions.Expression<Func<FacturaDetalle, bool>>
    facturaSpecification.SatisfiedBy() devuelve System.Linq.Expressions.Expression<Func<Factura, bool>>

     Gracias de antemano por la ayuda.

     


    Tecnología .NET

    miércoles, 31 de julio de 2013 8:26

Todas las respuestas

  • hola

    que pasa si usas

    .Where(f => f.Lineas.Any(sampleSpecification.SatisfiedBy()));

    porque ese where que defines espera un bool, por lo que poner otro where no aplcia, pero quizas un any que indique si alguna linea cumpla la condicion podria aplicar

    slaudos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 31 de julio de 2013 12:42