按照自定义列表顺序对DataTable进行排序

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个回答

1
如果您想使用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();

没有基准测试,你认为这种(联结方法)执行效果更好吗?我不会引用你的话。 - yazanpro
你的方法正在执行双重循环,而这个操作正在执行连接(join)。我不确定内存连接是如何完成的,因此无法确定。然而,这种方式更易读且更紧凑,所以只有在这段代码成为瓶颈时才需要担心性能问题。 - CodingYoshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接