基于两列对DataTable进行排序
问题描述:
我目前有一个DataTable填充数据,但是,我想在使用它之前基于两列对它进行排序。基于两列对DataTable进行排序
这里是我的DataTable看起来像
DataTable的DT:
Date | Serial Number
22/06/2017 | 2
20/06/2017 | 1
22/06/2017 | 1
20/06/2017 | 2
我在网上搜集,并试图dt.DefaultView.Sort
或LINQ
,但我无法得到它的工作。我曾尝试以下这些:
dt.DefaultView.Sort = "Date, Serial Number";
DataTable newDt = dt.AsEnumerable().OrderBy(r => r.Field<DateTime>("Date"))
.ThenBy(r => r.Field<int>("Serial Number")).CopyToDataTable();
我试着在上面和我得到的结果中提到的方法回是排序只是基于一个塔,例如:
Date | Serial Number
22/06/2017 | 2
22/06/2017 | 1
20/06/2017 | 1
20/06/2017 | 2
但是,这是不是我想要的。下面是我想要的东西,
预期结果:
Date | Serial Number
20/06/2017 | 1
20/06/2017 | 2
22/06/2017 | 1
22/06/2017 | 2
我想知道是否有任何的方式来执行操作进行排序的方式,将数据表?谢谢。
答
下面的代码似乎为我工作。
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static DataTable Dt;
static void Main(string[] args)
{
Dt = new DataTable();
Dt.Columns.Add(new DataColumn("date", typeof(DateTime)));
Dt.Columns.Add(new DataColumn("Serial Number", typeof(int)));
AddRow(Dt.NewRow(), new DateTime(2017, 06, 22), 2);
AddRow(Dt.NewRow(), new DateTime(2017, 06, 22), 1);
AddRow(Dt.NewRow(), new DateTime(2017, 06, 20), 2);
AddRow(Dt.NewRow(), new DateTime(2017, 06, 20), 1);
foreach(DataRow dr in Dt.Rows)
{
Console.WriteLine(string.Format("{0}\t{1}", dr[0], dr[1]));
}
DataView dv = Dt.DefaultView;
dv.Sort = "date, Serial Number";
foreach(DataRow dr in dv.ToTable().Rows)
{
Console.WriteLine(string.Format("{0}\t{1}", dr[0], dr[1]));
}
Console.ReadKey();
}
static void AddRow(DataRow dr, DateTime dt, int serialNumber)
{
dr[0] = dt;
dr[1] = serialNumber;
Dt.Rows.Add(dr);
}
}
}
什么阻止你分享你试过的代码? –
@ChetanRanpariya没有什么阻止我分享。我只是想直接点。如果你可以问,我可以分享。 – Alvin
如果我们不知道你曾经尝试过什么以及哪里出错,那么不容易理解可能是什么问题并提供解决方案。如果你能分享你的代码,这将是有帮助的。 –