我见过类似这个,但无法找到答案。我有2个enities出版物和作者。 作者不是强制性的,当我OrderBy Publication.Author.Surname我得到NullReferenceException,因为出版物dosnt总是有一个相关的作者。我如何编写这个简单的查询,以及为什么hent dosnt EhtityFramework知道如何处理这个问题?实体框架Orderby一对多实体
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();
失败,因为出版物dosnt始终有相关的作者。注:db是实体框架的DbContext如下:
public class PPRDBContext : DbContext
{
public DbSet<Publication> Publications { get; set; }
public DbSet<Author> Authors { get; set; }
}
什么类型db.Publications?如果它是IQueryable(例如IDbSet),EF会将表达式转换为SQL代码,即p.Author.Surname实际上并未执行,因此它不会引发异常。 EF将生成类似外连接的内容,而NULL作者将按其他值排序。我没有进一步修改就得到了这个工作。 – lgoncalves
如果你得到这个异常,它可能是一个标志,它是一个IEnumerable而不是IQueryable,这意味着该序列是在内存中的。 – lgoncalves
lgoncalves - 我添加了db(DBContext)代码来显示出版物的位置。所以Publications是一个DbSet,但它仍然抛出异常。 – gisWeeper