Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按自定义列表顺序对数据表排序_C#_.net - Fatal编程技术网

C# 按自定义列表顺序对数据表排序

C# 按自定义列表顺序对数据表排序,c#,.net,C#,.net,我希望根据特定列和现有的排序列表对数据表进行排序。 这就是我到目前为止的想法: 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) {

我希望根据特定列和现有的排序列表对
数据表进行排序。
这就是我到目前为止的想法:

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;
}
公共数据表SortByID(数据表、字符串列名、列表ID)
{
DataTable结果=table.Clone();
foreach(id中的int-id)
{
foreach(table.Rows中的DataRow行)
{
if(Convert.ToInt32(行[columnName])==id)
{
result.Rows.Add(row.ItemArray);
打破
}
}
}
返回结果;
}

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

如果您想使用Linq,您可以将
列表ID
加入
数据表
,因为您的列表已经排序,所以结果将按该顺序排列:

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

var orderedTable = query.CopyToDataTable();
var查询=
从ID中的l开始
在l=t.Field(columnName)上的table.AsEnumerable()中连接t
选择t;
var orderedTable=query.CopyToDataTable();

如果没有基准测试,您认为这种(连接方法)性能更好吗?我不会引用你的话。你的方法是做一个双循环,这是做一个连接:我不确定内存中的连接是如何完成的,所以我不能说。但是,这更具可读性和紧凑性,因此如果这段代码是瓶颈,我只会担心性能。