为什么IEnumerable.ToList()按字母顺序返回字段?

时间:2014-03-29 19:39:34

标签: c# linq ienumerable tolist

我在一个使用LINQ投影返回IENumerable Colection的类中有这个简单的函数:

public IEnumerable<Pedidos> 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                    
                    select Pedidos).ToList();                
            }
        }

有人能告诉我为什么IEnumerable的字段按字母顺序而不是原始对象定义返回?我如何按特定顺序退回会员?谢谢

更新 对不起,如果我的问题不清楚。我会尝试解释我的问题。 Pedidos类(它是由EF生成的POCO类)具有以下属性:

public class Pedidos
    {
        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 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; }        
    }

我的订单问题与课堂内的数据无关,因此订单提升并不能解决我的问题。它是关于属性的顺序。当我使用ToList()来填充这个类时,我按字母顺序(Aprobado,Bruto等等)获取属性,而不是类顺序的定义(ID_Pedido,Numero等等)。这里字段名称的语言无关紧要。希望这清楚我的答案。

Thats the result show by VS

当我尝试在数据网格上显示cliente的数据时:

same problema here

正如您在两种情况下所看到的,属性属性显示为alphabelicaly而不是类顺序。为什么呢?

3 个答案:

答案 0 :(得分:2)

就像SQL一样,LINQ查询没有定义的排序。它可以按照自己想要的任何顺序返回。它返回有序列表的事实可能归功于内部工作,不应该依赖它。如果您要构建特定订单,请使用orderbyOrderBy方法:

               (from Pedidos in context.Pedidos
                join Clientes in context.Clientes on Pedidos.ID_Cliente equals Clientes.ID_Cliente
                where Pedidos.ID_Comprobante == sComprobante
                orderby Pedios.[the property you want to order by]
                select Pedidos).ToList();  

答案 1 :(得分:0)

IEnumerable中的顺序未定义,可能是任何内容。如果您仍想要定义订单,可以使用OrderBy

答案 2 :(得分:0)

您的查询中没有任何内容按字母顺序排序。

使用orderby关键字对结果进行排序:

from Pedidos in context.Pedidos
join Clientes in context.Clientes
    on Pedidos.ID_Cliente equals Clientes.ID_Cliente
where Pedidos.ID_Comprobante == sComprobante
orderby Pedidos.ID  // change to the field you want to sort by alphabetically
select Pedidos