2012-01-30 73 views
1

我有一個表(例如)4列。Linq和排序空字段

  • 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][email protected]_id) 
    ORDER BY ISNull([end_date],'9999-DEC-31') DESC, [start_date] DESC 
+1

如果你已經在SQL中完成了,你應該在這裏包括這個問題。你在LINQ查詢中工作並不遙遠。 – 2012-01-30 06:20:44

+0

謝謝@Jeff - 添加了查詢。 – Craig 2012-01-30 06:25:54

回答

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;