我见过类似的但是找不到答案。我有2个enities出版和作者。 作者不是强制性的,当我在OrderBy Publication.Author.Surname时,我得到NullReferenceException,因为Publication dosnt总是有一个相关的作者。我如何编写这个简单的查询以及为什么heck dosnt EhtityFramework知道如何处理这个?
public class Publication {
[Key]
public int ID { get; set; }
public string Title { get; set; }
[Display(Name = "Author")]
public int? AuthorId { get; set; }
public virtual Author Author { get; set; }
}
public class Author{
[Key]
public virtual int ID { get; set; }
public virtual string Forename { get; set; }
public virtual string Surname { get; set; }
}
this.db.Publications
.OrderBy(p=>p.Author.Surname)
.Skip(skip)
.Take(model.PageSize).ToList();
失败,因为Publication dosnt总是有一个相关的作者。注意:db是Entity Framework DBContext,如下所示:
public class PPRDBContext : DbContext
{
public DbSet<Publication> Publications { get; set; }
public DbSet<Author> Authors { get; set; }
}
答案 0 :(得分:3)
这不是EF的错 - 在访问引用对象的属性时,它是我所知道的任何语言的常见陷阱。
根据您是否希望首先使用NULL值,您可以执行以下操作:
.OrderBy(p=> p.Author == null ? "" : p.Author.Surname)
如果您希望NULL值最后使用,请执行以下操作:
.OrderBy(p=> p.Author == null ? "ZZZZZ" : p.Author.Surname)