我有一个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);
}