我有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();
但这只排列1列......
答案 0 :(得分:4)
您可以使用LINQ to DataSet
var sortedDT = dt.AsEnumerable()
.OrderBy(r => r.Field<string>("Name"))
.ThenBy(r => r.Field<DateTime>("Date"))
.CopyToDataTable();
使用CopyToDataTable方法从有序行创建新的DataTable。
答案 1 :(得分:2)
http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx
您需要做的就是在dv.Sort行的列之间添加逗号。
澄清
dv.Sort = "Name, Date";
答案 2 :(得分:2)
您可以使用Linq-To-DataSet
:
var orderedRows = from row in dt.AsEnumerable()
orderby row.Field<string>("Name"), row.Field<DateTime>("Date")
select row;
DataTable tblOrdered = orderedRows.CopyToDataTable();
如果Date
列实际上是字符串列,则需要先将其解析为DateTime
。
假设格式有效:
var orderedRows = from row in dt.AsEnumerable()
let date = DateTime.Parse(row.Field<string>("Date"), CultureInfo.InvariantCulture)
orderby row.Field<string>("Name"), date
select row;