可选参数过滤后的LINQ Projection

ericpap

我在课堂上有这个功能:

public IEnumerable<PedidosList> Pedidos_Listar(string sComprobante, Clientes MyCliente = null, DateTime? dDesde = null, DateTime? dHasta = null, bool bCumplidos = false)
{           
    using (var context = new OhmioEntities())
    {
        IEnumerable<PedidosList> query =
            from Pedidos in context.Pedidos
            join Clientes in context.Clientes on Pedidos.ID_Cliente equals Clientes.ID_Cliente
            where Pedidos.ID_Comprobante == sComprobante                    
            select new PedidosList {ID_Pedido = Pedidos.ID_Pedido, Fecha=Pedidos.Fecha, Aprobado=Pedidos.Aprobado, Bruto=Pedidos.Bruto, Cliente=Clientes.RazonFantasia, 
                FechaEntrega=Pedidos.FechaEntrega, Neto=Pedidos.Neto, Numero=Pedidos.Numero, Observaciones=Pedidos.Observaciones, Entregado=Pedidos.Entregado, ID_Cliente=Pedidos.ID_Cliente };

        if (MyCliente != null) query = query.Where(i => i.ID_Cliente == MyCliente.ID_Cliente);
        if (MyCliente != null) query = query.Where(i => i.ID_Cliente == MyCliente.ID_Cliente);
        if (dDesde != null && dHasta != null) query = query.Where(i => i.Fecha >= dDesde && i.Fecha <= dHasta);
        if (bCumplidos == false) query = query.Where(i => i.Entregado == false);                
        return query.ToList();
    }
}

想法是使用LINQ投影来填充自定义类对象,在该对象中将评估多个可选过滤器参数。我的问题是:出于性能和封装方面的考虑,在应用滤镜的情况下,我可以将AFTER投影设为可选吗?在我的代码中,投影是在之前完成的,因此我只能按自定义类中的字段进行过滤,但是我想对原始类中的字段进行过滤。谢谢你。

马尔辛·尤拉塞克(MarcinJuraszek)
var query =
    from Pedidos in context.Pedidos
    join Clientes in context.Clientes on Pedidos.ID_Cliente equals Clientes.ID_Cliente
    where Pedidos.ID_Comprobante == sComprobante      
    select new { Pedidos, Clientes };              

if (MyCliente != null)
{
    query = query.Where(i => i.Pedidos.ID_Cliente == MyCliente.ID_Cliente);
    query = query.Where(i => i.Periodos.ID_Cliente == MyCliente.ID_Cliente);
}
if (dDesde != null && dHasta != null)
    query = query.Where(i => i.Pedidos.Fecha >= dDesde && i.Pedidos.Fecha <= dHasta);
if (bCumplidos == false)
    query = query.Where(i => i.Pedidos.Entregado == false);      

return (from x in query
        let Pedidos = x.Pedidos
        let Clientes = x.Clientes
        select new PedidosList {ID_Pedido = Pedidos.ID_Pedido, Fecha=Pedidos.Fecha, Aprobado=Pedidos.Aprobado, Bruto=Pedidos.Bruto, Cliente=Clientes.RazonFantasia, FechaEntrega=Pedidos.FechaEntrega, Neto=Pedidos.Neto, Numero=Pedidos.Numero, Observaciones=Pedidos.Observaciones, Entregado=Pedidos.Entregado, ID_Cliente=Pedidos.ID_Cliente
        }).ToList(); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章