如何基于多列对DataTable进行排序?

我有DataTable

 Name Date bbb 01/01/2011 bbb 01/01/2012 aaa 01/01/2010 aaa 01/01/2011 bbb 01/01/2013 aaa 01/01/2012 bbb 01/01/2010 ccc 01/01/2010 aaa 01/01/2013 ccc 01/01/2012 ccc 01/01/2011 

我需要按名称排序此表,按日期排序每个名称:

 Name Date aaa 01/01/2010 aaa 01/01/2011 aaa 01/01/2012 aaa 01/01/2013 bbb 01/01/2010 bbb 01/01/2011 bbb 01/01/2012 bbb 01/01/2013 ccc 01/01/2010 ccc 01/01/2011 ccc 01/01/2012 

如何在c#中对DataTable进行排序?

我尝试过以下方法:

  DataView dv = dt.DefaultView; dv.Sort = "col1 desc"; DataTable sortedDT = dv.ToTable(); 

但这只是一列……

http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx

您需要做的就是在dv.Sort行的列之间添加逗号。

澄清

 dv.Sort = "Name, Date"; 

您可以使用LINQ to DataSet

 var sortedDT = dt.AsEnumerable() .OrderBy(r => r.Field("Name")) .ThenBy(r => r.Field("Date")) .CopyToDataTable(); 

使用CopyToDataTable方法从已排序的行创建新的DataTable。

您可以使用Linq-To-DataSet

 var orderedRows = from row in dt.AsEnumerable() orderby row.Field("Name"), row.Field("Date") select row; DataTable tblOrdered = orderedRows.CopyToDataTable(); 

如果Date列实际上是一个字符串列,则需要先将其解析为DateTime

假设有效格式:

 var orderedRows = from row in dt.AsEnumerable() let date = DateTime.Parse(row.Field("Date"), CultureInfo.InvariantCulture) orderby row.Field("Name"), date select row;