我在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();
如何将我的通用列表排序为数据表结果? (我希望在通用列表中有相同的数据表结果)
感谢。
答案 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";