我有一张表(例如)有4列。
pk_table_id INT NOT NULL
username VARCHAR(100) NOT NULL
start_date DATETIME NOT NULL
end_date DATETIME NULL
我的要求是按end_date
的降序返回所有行 - 但是NULL值必须是第一个,然后是start_date的降序。
我已经在SQL中完成了 - 但有人可以用LINQ版本协助我吗?
这是我们使用的SQL查询:
SELECT [person_employment_id]
, [party_id]
, [employer_name]
, [occupation]
, [telephone]
, [start_date]
, [end_date]
, [person_employment_type_id]
, [person_employment_end_reason_type_id]
, [comments]
, [deleted]
, [create_user]
, [create_date]
, [last_update_user]
, [last_update_date]
, [version]
FROM [dbo].[person_employment]
WHERE ([party_id]=@party_id)
ORDER BY ISNull([end_date],'9999-DEC-31') DESC, [start_date] DESC
答案 0 :(得分:2)
对于此问题,您可以对end_date
执行空检查,并将该结果用作排序。因此,您不需要使用相同的SQL结构来实现此目的,而是使用您选择的语言更自然(C#我假设)。
var query =
from row in dc.Table
let isEndDateNull = row.end_date == null
orderby isEndDateNull descending, row.start_date descending
select row;