0

これに似たものを見たことがありますが、答えが見つかりません。私は出版物と著者の2つのエンティティを持っています。Author は必須ではなく、Publication.Author.Surname で OrderBy を実行すると NullReferenceException が発生します。この単純なクエリを作成するにはどうすればよいですか? また、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();

出版物には関連する著者が常に存在するとは限らないため、失敗します。注: db は、以下の Entity Framework DBContext です。

public class PPRDBContext : DbContext
{
  public DbSet<Publication> Publications { get; set; }
  public DbSet<Author> Authors { get; set; }
}
4

1 に答える 1

3

これは EF のせいではありません。参照されるオブジェクトのプロパティにアクセスするときに、私が知っているすべての言語に共通するトラップです。

NULL 値を最初に表示するかどうかに応じて、次のようにすることができます。

.OrderBy(p=> p.Author == null ? "" : p.Author.Surname)

NULL 値を最後にしたい場合は、次のようなものを使用します。

.OrderBy(p=> p.Author == null ? "ZZZZZ" : p.Author.Surname)
于 2012-09-04T15:01:44.700 に答える