Почему IEnumerable.ToList() возвращает поля в алфавитном порядке?

У меня есть эта простая функция в классе, который возвращает IENumerable Colection с использованием проекции LINQ:

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 (это действительно класс POCOs, сгенерированный из EF) имеет некоторые свойства, подобные этим:

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 и т. Д.). Язык названий полей здесь не имеет значения. Надеюсь, что это ясно, мой ответ.

Вот результат шоу от VS

Когда я пытаюсь показать данные о клиентах через сетку данных:

та же проблема здесь

Как вы можете видеть, в обоих случаях свойства свойств отображаются в алфавитном порядке, а не в классе. Зачем?

3 ответа

Как и в случае с SQL, здесь нет определенного порядка для запроса LINQ. Он может вернуться в любом порядке. Тот факт, что он возвращает упорядоченный список, возможно, благодаря внутренней работе и на него нельзя полагаться. Если вы хотите построить конкретный заказ, используйте orderby или же 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 Pedios.[the property you want to order by]
                select Pedidos).ToList();  

Заказ в IEnumerable не определено, и это может быть любая вещь. Если вы все еще хотите определить заказ, вы можете использовать OrderBy,

В вашем запросе нет ничего преднамеренно упорядоченного по алфавиту.

Использовать 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
Другие вопросы по тегам