2017-06-22 158 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); 
    } 
} 
} 
相關問題