Linq и сортировка пустых полей - PullRequest
1 голос
/ 30 января 2012

У меня есть таблица, которая имеет (например) 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 Ответ

2 голосов
/ 30 января 2012

Для этой проблемы вы можете выполнить нулевую проверку на 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;
...