Почему 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 и т. Д.). Язык названий полей здесь не имеет значения. Надеюсь, что это ясно, мой ответ.
Когда я пытаюсь показать данные о клиентах через сетку данных:
Как вы можете видеть, в обоих случаях свойства свойств отображаются в алфавитном порядке, а не в классе. Зачем?
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