如何基于多列对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;