我在一个使用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等等)。这里字段名称的语言无关紧要。希望这清楚我的答案。
当我尝试在数据网格上显示cliente的数据时:
正如您在两种情况下所看到的,属性属性显示为alphabelicaly而不是类顺序。为什么呢?
答案 0 :(得分:2)
就像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();
答案 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