如何在实体框架中按空值排序

dev*_*ife 27 entity-framework

有谁知道如何返回最后一个有空值的有序字符串列表?我有这样的事情:

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

我的问题是这个查询在非空值之前返回空值.

有什么想法吗?

Cra*_*ntz 54

我会做:

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);
}
Run Code Online (Sandbox Code Playgroud)

...应该产生合理的SQL.

  • 因为`false`在`true`之前排序. (11认同)
  • 所以这确实有效,但我很困惑为什么它的工作原理.为什么指定LastName == null首先返回非空值? (7认同)
  • 为了使这个答案完整,我认为最好将您的评论添加到答案本身。“因为错误排序先于正确排序。” (2认同)

500*_*ror 5

我不知道您是否可以在某处进行一些切换。否则,直截了当的方法可能类似于

    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);
    }
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑这将产生相当难看的SQL。 (2认同)

Ale*_*sev 5

var result = context.Users.OrderBy(x => x.FirstName ?? x.LastName);
Run Code Online (Sandbox Code Playgroud)