2017-06-22 165 views
0

我目前有一个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.SortLINQ,但我无法得到它的工作。我曾尝试以下这些:

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 

我想知道是否有任何的方式来执行操作进行排序的方式,将数据表?谢谢。

+0

什么阻止你分享你试过的代码? –

+0

@ChetanRanpariya没有什么阻止我分享。我只是想直接点。如果你可以问,我可以分享。 – Alvin

+0

如果我们不知道你曾经尝试过什么以及哪里出错,那么不容易理解可能是什么问题并提供解决方案。如果你能分享你的代码,这将是有帮助的。 –

回答

1

在LINQ你会用

XXX.OrdyBy(o => o.Field1).ThenBy(o => o.Field2) 
+0

我已更新帖子,请看看。不管怎么说,还是要谢谢你! – Alvin

3

下面的代码似乎为我工作。

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); 
    } 
} 
} 
相关问题