2017-04-25 17 views
3

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のを使用したい場合は、あなたがDataTableからList<int> idsに参加することができますし、あなたのリストがすでに発注されているので、結果はその順序になります:あなたは(これを思い、ベンチマークなし

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

関連する問題