【发布时间】:2016-05-26 20:13:10
【问题描述】:
经过几个小时的尝试和研究,我仍然遇到以下问题。
我有一个客户列表,每个客户都有一个订单列表。我现在想按客户的最高订单号对客户列表进行排序。 另一方面是不是每个客户都有订单,所以为了排序,我想用“-”号替换缺失的订单号。
我的第一种方法行不通,因为它无法比较对象,但它很好地解释了问题。
customers.OrderBy(m => m.Orders == null ? "-" : m.Orders.LastOrDefault().OrderNumber.ToString());
阅读下面的链接后,我最终得到了这段代码,但这也不起作用。
how do I sort a collection with child property?
customers.OrderBy(c => c.Orders.OrderBy(o => o == null ? "-" : o.OrderNumber.ToString()).Select(o => o == null ? "-" : o.OrderNumber.ToString()).ToList();
谁能告诉我怎样才能做到最好?
最好的问候
编辑:
这是我要排序的实体(不是完整实体)。 我正在使用实体框架,我已经将客户读出为 IQueryable,现在我需要对其进行排序。
客户
public class Customer
{
public int ID { get; set; }
public virtual List<Order> Orders { get; set; }
}
订购
public class Order {
public int ID { get; set; }
public int OrderNumber { get; set; }
public virtual Customer Customer { get; set; }
}
现在客户不一定有关联的订单列表。 这意味着一个客户可以有 0,1 或 n 个订单分配给他,这就是我使用 null 的意思。
【问题讨论】:
-
请添加输入和输出以便更好地理解
-
从您的 cmets 获取当前答案看起来您正在寻找 LINQ to Entities 查询。如果这是真的,请相应地更新帖子和标签。这是因为 LINQ to Entities 支持有限的构造集,而且第一种方法中的
m.Orders和第二种方法中的o都不能是null。 -
我会尽快更新我的问题。
-
顺便说一句,您确定按数字排序转换为字符串会产生正确的排序吗?我不这么认为,例如“11”将在“2”之前。通过“-”,我猜您希望没有订单的客户在订单中排在第一位。
-
你是绝对正确的字符串比较不是正确的方法