LINQ OrderBy not sorting



我有一个Customer类,它有一个ListOf Orders。我正在设法按日期对所有订单进行排序。日期"order_date"是YYYY:MM:DD HH:MM:SS格式的字符串。

以下是代码Lambda表达式:

Dim orders() = Customer.Orders.ToArray().OrderBy(Function(c) c.order_date).ToArray()

这似乎没有对日期进行排序。

我试图转换为DateTime,如果order_date为null或有一些值,它可以正常工作,但如果order_datedate为空,则会引发异常。

Dim orders() = Customer.Orders.OrderBy(Function(c) (Not String.IsNullOrEmpty(c.order_date))).ThenBy(Function(c) Convert.ToDateTime(c.order_date)).ToArray()

我可以看到你在使用VB,我使用C#,但你应该能够翻译

var orders = Customer.Orders.ToList().Sort((a,b)=> a.order_date.Compare(b.order_date))

MSDN在这里有一篇完整的文章

如果您正在尝试使用Linq2Sql/Entities,那么在将它们放回内存之前,您希望对数据库进行排序。排序之前不需要执行ToArray()。还可以考虑对数据库中出现的代码使用linq语法。它让开发人员清楚地知道你在哪里查询

 var orders = (from o in DataContext.Orders
              where o.Customer.Id == customerId
              orderby o.order_date
              select o)

下面是的另一个例子

    static void Main(string[] args)
    {
        var dates = new List<DateTime?>()
                    {
                        null,
                        null,
                        new DateTime(2001, 2, 3),
                        null,
                        new DateTime(2001, 12, 3),
                        new DateTime(2021, 12, 3)
                    };
         dates.Sort(CompareDates);
    }
    private static int CompareDates(DateTime? x, DateTime? y)
    {
        if (x == null)
        {
            return y == null ? 0 : -1;
        }
        return y == null ? 1 : x.Value.CompareTo(y.Value);
    }

最新更新