请耐心等待......我是一名数据库专家,这是我在数据库中通常需要快速自定义排序的时候...
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"))
答案 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;
您可以通过这种方式记住它是如何工作的:比较返回(与第一版相关)bool
,true
为1
,false
为0
。如果你希望它在最后,你要么必须扭转条件,要么(更好)使用ascending
。
现在您可以使用foreach
:
foreach(DataRow row in ordered)
{
// ..
}
或使用ToList
/ ToArray
或更合适的DataTable
创建一个集合:
DataTable orderedTable = ordered.CopyToDataTale();