简体   繁体   English

如何在C#中对像datatable这样的通用列表进行排序

[英]How sort generic list like datatable in c#

i working on c# project(winform). 我在c#项目(winform)上工作。

on my project, i sorted a datatable like this: 在我的项目中,我对数据表进行了如下排序:

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

now with below expression, i sorted a generic list, but results is different against datatale results. 现在使用下面的表达式,我对通用列表进行了排序,但是结果与数据故事的结果不同。

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

how can sorted my generic list like datatable results? 如何对我的通用列表进行排序(如数据表结果)? (i want have same sort datatable results in generic list) (我想在通用列表中有相同排序的数据表结果)

thanks. 谢谢。

Use ThenBy / ThenByDescending after first OrderBy / OrderByDescending operator - it performs subsequent ordering of already ordered sequence: 在第一个OrderBy / OrderByDescending运算符之后使用ThenBy / ThenByDescending它对已排序的序列执行后续排序:

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

Otherwise you are re-ordering full sequence each time by different value (ie you are introducing new primary ordering that ignores previous ordering - see Remarks section on MSDN). 否则,您每次都按不同的值对完整序列进行重新排序(即,您要引入忽略先前排序的新主排序-请参阅MSDN上的“ 备注”部分)。 And you'll end up with sequence sorted only by value provided to last OrderBy call (property c in your case). 最后,您将得到仅按提供给上次OrderBy调用的值排序的序列(在您的情况下为属性c )。 Your current code is equivalent of 您当前的代码等效于

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM