2010-05-11 31 views
19

有誰知道如何返回空值最後的有序列表嗎?我有這樣的事情:如何按實體框架中最後一個空值的列進行排序

using(var context = new DomainEntities()) 
{ 
    var result = context.Users.OrderBy(u => u.LastName).ThenBy(u => u.FirstName); 
} 

雖然我的問題是,此查詢返回非空值之前的空值。

有什麼想法?

回答

38

線的東西,我會做:

using(var context = new DomainEntities()) 
{ 
    var result = context.Users.OrderBy(u => u.LastName == null) 
           .ThenBy(u => u.LastName) 
           .ThenBy(u => u.FirstName == null) 
           .ThenBy(u => u.FirstName); 
} 

...這應產生合理的SQL。

+6

所以這確實有用,但我很困惑它爲什麼會起作用。爲什麼要指定LastName == null首先返回非空值? – devlife 2010-05-18 22:39:37

+7

因爲'false'在'true'之前排序。 – 2010-05-19 01:30:08

+0

第一個分號是type-o(在檢查u.FirstName == null後)? – WEFX 2012-02-14 17:34:48

4

我不知道是否有某個開關可以翻轉。否則,直接的方法很可能是沿

using (var context = new DomainEntities()) 
    { 
     var FirstPart = context.Users.Where(u => u.LastName != null); 
     var SecondPart = context.Users.Where(u => u.LastName == null); 
     var Result = FirstPart.Union(SecondPart); 
    } 
+2

這會產生相當醜陋的SQL,我懷疑。 – 2010-05-12 14:26:35

+0

定義醜陋:)實際上,它不會像你想象的那樣糟糕 - 對於SQL Server 2008來說,至少EF會將這樣的東西變成單個數據庫查詢語句。 – 2010-05-12 17:22:49

+0

這將是一個聲明,是的,只是過於複雜。 – 2010-05-13 13:08:31

相關問題