如何在c#中排序类似于数据表的通用列表

时间:2013-12-19 10:13:34

标签: c# linq sorting datatable

我在c#project(winform)上工作。

在我的项目中,我对这样的数据表进行了排序:

dt.DefaultView.Sort = "a ASC, b ASC, c ASC";

现在使用下面的表达式,我对一个通用列表进行了排序,但结果与datatale结果不同。

var newList = oldList.OrderBy(x => x.a).OrderBy(x => x.b).OrderBy(x => x.c).ToList();

如何将我的通用列表排序为数据表结果? (我希望在通用列表中有相同的数据表结果)

感谢。

1 个答案:

答案 0 :(得分:6)

在第一个ThenBy / ThenByDescending运算符后使用OrderBy / OrderByDescending - 它会执行已排序序列的后续排序:

var newList = oldList.OrderBy(x => x.a)
                     .ThenBy(x => x.b)
                     .ThenBy(x => x.c)
                     .ToList();

否则,您每次都会按不同的值重新排序完整序列(即您引入了忽略先前排序的新主要排序 - 请参阅MSDN上的备注部分)。并且您最终只会按照上次OrderBy调用的值(在您的情况下为属性c)对序列进行排序。您当前的代码相当于

dt.DefaultView.Sort = "a ASC";
dt.DefaultView.Sort = "b ASC";
dt.DefaultView.Sort = "c ASC";