2017-04-25 254 views
3

我在尋找基於特定列和現有排序列表排序DataTable。 這是我想出了迄今:按自定義列表排序對DataTable進行排序

public DataTable SortByID(DataTable table, string columnName, List<int> ids) 
{ 
    DataTable result = table.Clone(); 
    foreach (int id in ids) 
    { 
     foreach(DataRow row in table.Rows) 
     { 
      if (Convert.ToInt32(row[columnName]) == id) 
      { 
       result.Rows.Add(row.ItemArray); 
       break; 
      } 
     } 
    } 
    return result; 
} 

這工作,但我認爲有可能是更好地執行一些其他的解決辦法。

回答

1

如果你想使用LINQ的,你可以加入List<int> idsDataTable和因爲你的列表已經下令,結果會按照這個順序:

var query = 
    from l in ids 
    join t in table.AsEnumerable() on l equals t.Field<String>(columnName) 
    select t; 

var orderedTable = query.CopyToDataTable(); 
+0

沒有一個標杆,你認爲這(加入方式)表現更好?我不會引用你的話。 – yazanpro

+0

你的方法正在做一個雙循環,這是做一個連接:我不知道如何在內存連接完成,所以我不能說。但是,這更具可讀性和緊湊性,所以如果這段代碼是瓶頸,我只會擔心性能。 – CodingYoshi