如何在linq中添加行号列

时间:2018-03-06 17:50:18

标签: linq

我想在linq查询中添加一个行号,我有下一个代码:

return (
                from p in dbContext.pedidos
                where p.Fecha == DateTime.Now
                orderby p.Fecha
                select new PedidosModel()
                {
                    IdPedido = p.IdPedido,
                    Fecha = p.Fecha,
                    IdCliente = p.IdCliente,
                    Observaciones = p.Observaciones,
                    Estatus = p.Estatus
                }
            ).ToList();

1 个答案:

答案 0 :(得分:1)

您可以在客户端使用select的两个参数版本来添加行号:

return (
        from p in dbContext.pedidos
        where p.Fecha == DateTime.Now
        orderby p.Fecha
       ).ToList()
        .Select((p,r) => new PedidosModel()
            {
                IdPedido = p.IdPedido,
                Fecha = p.Fecha,
                IdCliente = p.IdCliente,
                Observaciones = p.Observaciones,
                Estatus = p.Estatus,
                RowNumber = r
            }
        ).ToList();

注意:如果pedidos个对象很大,检索它们然后投影可能不如投射两次效率高:

return (
        from p in dbContext.pedidos
        where p.Fecha == DateTime.Now
        orderby p.Fecha
        select new PedidosModel()
        {
            IdPedido = p.IdPedido,
            Fecha = p.Fecha,
            IdCliente = p.IdCliente,
            Observaciones = p.Observaciones,
            Estatus = p.Estatus
        }
    ).AsEnumerable()
     .Select((p, r) => new { p, RowNumber = r })
     .ToList();