linq不依赖于c#上的列表

时间:2015-05-09 14:20:47

标签: c# linq

我有这段代码

public void OrdenarPedidosPorFecha()
        {
            pedidos.OrderBy(pedido => pedido.fechaEntrega);
        }

Plan planT = new Plan();

            Producto productoT = new Producto("productoTest", 0, 0, 0);
            Cliente clienteT = new Cliente("clienteTest", 0);
            Pedido pedidoT = new Pedido(productoT, clienteT, 0, DateTime.Now);

            Producto productoT1 = new Producto("productoTest1", 0, 0, 0);
            Cliente clienteT1 = new Cliente("clienteTest1", 0);
            Pedido pedidoT1 = new Pedido(productoT1, clienteT1, 0, DateTime.Now.AddDays(1));

            Producto productoT2 = new Producto("productoTest2", 0, 0, 0);
            Cliente clienteT2 = new Cliente("clienteTest2", 0);
            Pedido pedidoT2 = new Pedido(productoT2, clienteT2, 0, DateTime.Now.AddDays(2));

            planT.AgregarPedidoAPlan(pedidoT2);
            planT.AgregarPedidoAPlan(pedidoT);
            planT.AgregarPedidoAPlan(pedidoT1);

            MessageBox.Show(planT.pedidos[0].fechaEntrega.ToString());
            MessageBox.Show(planT.pedidos[1].fechaEntrega.ToString());
            MessageBox.Show(planT.pedidos[2].fechaEntrega.ToString());

            planT.OrdenarPedidosPorFecha();

            MessageBox.Show(planT.pedidos[0].fechaEntrega.ToString());
            MessageBox.Show(planT.pedidos[1].fechaEntrega.ToString());
            MessageBox.Show(planT.pedidos[2].fechaEntrega.ToString());

当它显示它们时输出是相同的。你知道为什么不比较日期吗?我也尝试将.Date添加到fechaEntrega中,它也不起作用。

2 个答案:

答案 0 :(得分:2)

LINQ' OrderBy没有对源序列进行排序,但它会返回一个有序序列。

您需要在致电pedidos后再次设置OrderBy

答案 1 :(得分:1)

pedidos.OrderBy(pedido => pedido.fechaEntrega);

这不会修改pedidos集合,只需生成有序的可枚举(技术上为IOrderedEnumerable<T>)。

如果pedidos是List<T>使用

pedidos.Sort((x, y) => x.fechaEntrega.CompareTo(y.fechaEntrega));

如果fechaEntrega可以null使用

var comparer = Comparer<type of fechaEntrega>.Default;
pedidos.Sort((x, y) => comparer.Compare(x.fechaEntrega, y.fechaEntrega));

其中type of fechaEntregafechaEntrega的类型。

List<T>.Sort修改排序它的基础列表。