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