Linq和排序空字段

时间:2012-01-30 05:51:44

标签: linq sql-order-by

我有一张表(例如)有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

1 个答案:

答案 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;