DataTable SortBy(自定义?)

时间:2014-01-16 20:33:18

标签: c# datatable

请耐心等待......我是一名数据库专家,这是我在数据库中通常需要快速自定义排序的时候...

select *
from <table>
where columnname = 'something'
order by case column2 when 'c' then 1 when 'z' then 2 end

我正在尝试使用DataTables在C#中复制它。没有创建概述here的比较函数。是否有更简单/更快/更脏的方法...

这是我原本试图做的......

foreach(DataRow row in dt.Select("column1 = false","Column2 ASC, case Column3 when 'something' then 1 when 'somethingelse' then 2 else 3 end"))

1 个答案:

答案 0 :(得分:3)

您可以使用Linq-To-DataSet来实现相同的目标:

var ordered = from row in dt.AsEnumerable()
              let col2 = row.Field<string>("column2")
              orderby  col2 == "something" ? 1 : col2 == "somethingElse" ? 2 : 3
              select row;

您可以通过这种方式记住它是如何工作的:比较返回booltrue1false0。如果你希望它在最后,你要么必须扭转条件,要么(更好)使用ascending(与第一版相关)

现在您可以使用foreach

进行循环播放
foreach(DataRow row in ordered)
{
    // ..
}

或使用ToList / ToArray或更合适的DataTable创建一个集合:

DataTable orderedTable = ordered.CopyToDataTale();