我想根据特定的列和现有的排序列表对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;
}


这行得通,但是我认为可能还有其他一些性能更好的解决方案。

最佳答案

如果要使用Linq,可以将List<int> ids加入DataTable,并且由于已经对列表进行了排序,因此结果将按以下顺序排列:

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

var orderedTable = query.CopyToDataTable();

10-05 22:03
查看更多