我有一些用于排序对象列表的代码。
productsList.Sort(
delegate(Product p1, Product p2)
{
int result = p1.StartDatetime.CompareTo(p2.StartDatetime);
if (result == 0)
{
if (p1.SomeId == p2.SomeId)
{
result = 0;
}
else if (p1.SomeId == null)
{
result = -1;
}
else if (p2.SomeId == null)
{
result = 1;
}
}
return result;
});
我有一种感觉,可以通过替换它来简化:
productsList = productsList
.OrderBy(p => p.StartDatetime)
.ThenBy(p => p.SomeId)
.ToList();
我的假设是否正确?
答案 0 :(得分:2)
不完全但是很接近。第一个可以订购
List<Product> productsList = new List<Product>() {
new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 2 },
new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 4 }
};
以相反的顺序(SomeId
首先等于4
而SomeId
等于2
秒),但第二个会将它们命名为Product
{ {1}}首先等于SomeId
,2
等于Product
等于SomeId
秒。这是因为当前定义的委托不处理两个4
非空且不同的情况。因此,就相关代表而言,上述两个SomeId
是“相等的”但根据LINQ查询它们不是。