1

如果我有一个列表并执行 OrderBy,则具有空值的元素""将位于有序列表的顶部。相反,我想把它们放在列表的底部。我的代码:

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

有办法吗?

4

2 回答 2

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

因为在此false之前排序true会将所有非空值放在首位。

于 2013-03-19T11:28:48.863 回答
1

不太确定它的效率是多少:P,但您可以尝试以下方法。

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

如果您不想检查所有空白或空值,您可以将其与""或进行比较。string.Empty

于 2013-03-19T11:28:50.753 回答