2013-03-19 31 views
1

如果我有一個列表,並且我執行OrderBy,則具有空值""的元素將轉到排序列表的頂部。相反,我想把它們放在列表的最底部。我的代碼:我可以更改LINQ上的「相等比較器」嗎?

var orderedList = list.OrderBy(o => o.Field).ToList(); 

有沒有辦法?

回答

8
var orderedList = list.OrderBy(o => string.IsNullOrEmpty(o.Field)) 
         .ThenBy(o => o.Field) 
         .ToList(); 

因爲falsetrue前下令這會先將所有非空值。

1

不太確定它有多高效:P,但您可以嘗試以下操作。

var orderedList = list.Where(r=> !string.IsNullOrWhiteSpace(r)) 
         .OrderBy(o => o) 
         .Concat(list.Where(r => string.IsNullOrWhiteSpace(r)) 
         .ToList(); 

您可以""string.Empty比較,如果你不想檢查所有的空白或空值。

+0

'IsNullOrWhiteSpace'?爲什麼? – 2013-03-19 11:30:53

+0

@defaultlocale,只是爲了檢查所有類型的空字符串,在答案中也提到了這一點。 – Habib 2013-03-19 11:32:05

相關問題