【发布时间】:2011-04-06 14:50:18
【问题描述】:
我想确认一下,我正在尝试使用 Linq 对我的班级列表进行排序。但是当我使用排序功能时,数据的顺序似乎与排序方式不同。
假设列表包含 4 个 ComputeItem 并且它们的所有A都设置为1,所有的B、C、D都设置为零。
案例 1:
ItemList =
ItemList
.OrderByDescending(m => m.A)
.ThenBy(m => m.B)
.ThenBy(m => m.C)
.ThenBy(m => m.D)
.ToList<ComputeItem>();
对
案例 2:
ItemList.Sort(
delegate(ComputeItem item1, ComputeItem item2)
{
if (item1.A == item2.A)
{
if (item1.B == item2.B)
{
if (item1.C == item2.C)
{
return item1.D - item2.D;
}
else
{
return item1.C - item2.C;
}
}
else
{
return item1.B - item2.B;
}
}
else
{
return item2.A - item1.A;
}
}
);
第一次排序的结果是它没有移动任何东西。
第二次排序的结果是将其排序为不同的顺序。
原始订单 [1, 2, 3, 4]
案例 1 新订单 [1, 2, 3, 4]
CASE 2 新订单 [3, 4, 1, 2]
现在问题出在我使用 CASE2 并尝试将其迁移到 CASE 1 之前。但行为不会比以前发生巨大变化。知道为什么 CASE 2 改变了顺序吗?
【问题讨论】: