我見過類似這個,但無法找到答案。我有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