我上了这堂课:
public class PedidosList
{
public virtual int ID_Pedido { get; set; }
public virtual int Numero { get; set; }
public virtual DateTime Fecha { get; set; }
public virtual DateTime FechaEntrega { get; set; }
public virtual int ID_Cliente { get; set; }
public virtual string Cliente { get; set; }
public virtual Decimal Bruto { get; set; }
public virtual Decimal Neto { get; set; }
public virtual Boolean Aprobado { get; set; }
public virtual string Observaciones { get; set; }
public virtual Boolean Entregado { get; set; }
}
表示从POCO类映射到具有实体框架的SQL表的字段子集。然后使用此函数使用Linq to Entities进行可选过滤,并返回一个IENumerable集合:
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();
}
}
所以我的问题:这是实现这一目标的最佳途径吗?我可以制作一个可选的过滤器,在Pedidos上的某个字段上添加一个新的位置而不是在PedidosList上吗?示例:我必须将字段ID_Cliente添加到PedidosList,这样即使我不想在PedidosList上进行过滤也可以进行过滤。谢谢!
答案 0 :(得分:0)
我很晚才回答这个问题,但我刚刚遇到过它。我对你所做的事情并不特别不舒服,我认为这主要是个人偏好和你认为可读的问题。但如果我要写它,我可能会做这样的事情。
public IEnumerable<PedidosList> Pedidos_Listar(string sComprobante, Clientes MyCliente = null, DateTime? dDesde = null, DateTime? dHasta = null, bool bCumplidos = false)
{
using (var context = new OhmioEntities())
{
return from Pedidos in context.Pedidos
join Clientes in context.Clientes on Pedidos.ID_Cliente equals Clientes.ID_Cliente
where (Pedidos.ID_Comprobante == sComprobante) &&
(MyCliente == null || Pedidos.ID_Cliente == MyCliente.ID_Cliente) &&
(dDesde == null || dHasta == null || Pedidos.Fecha >= dDesde && Pedidos.Fecha <= dHasta) &&
(bCumplidos || Pedidosi.Entregado)
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()
。这否定了使用IEnumerable<T>
的一些好处。