【问题标题】:Why IEnumerable.ToList() return fields in alphabetical order?为什么 IEnumerable.ToList() 按字母顺序返回字段?
【发布时间】:2014-03-29 19:39:34
【问题描述】:

我在一个使用 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 生成的 POCOs 类)具有如下一些属性:

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; }        
    }

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

当我尝试通过数据网格在客户端上显示数据时:

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

【问题讨论】:

  • 1. Luck(?) 2. 按顺序使用
  • 字母顺序是什么?我们根本不知道Pedidos 是什么......你所说的“IEnumerable 的字段”是什么意思?您的问题目前尚不清楚。
  • @ercpap 将代码翻译成英文是有意义的,以获得更好的答案...
  • 你的意思是“属性是有序的”?您如何显示属性的顺序?
  • 这就是 Visual Studio 显示数据的方式。在调试会话期间,成员始终按字母顺序显示。

标签: c# linq ienumerable


【解决方案1】:

就像 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();  

【讨论】:

    【解决方案2】:

    IEnumerable 中的顺序没有定义,它可以是任何东西。如果还想定义订单,可以使用OrderBy

    【讨论】:

      【解决方案3】:

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

      使用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
      

      【讨论】:

        猜你喜欢
        • 2012-11-08
        • 1970-01-01
        • 2013-05-12
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        • 2016-08-02
        • 1970-01-01
        相关资源
        最近更新 更多