たとえば、これらのエンティティがあります。
public class Book
{
[Key]
public string BookId { get; set; }
public List<BookPage> Pages { get; set; }
public string Text { get; set; }
}
public class BookPage
{
[Key]
public string BookPageId { get; set; }
public PageTitle PageTitle { get; set; }
public int Number { get; set; }
}
public class PageTitle
{
[Key]
public string PageTitleId { get; set; }
public string Title { get; set; }
}
BookIdのみを知っている場合、すべてのPageTitlesをロードする方法を教えてください。
これが私がこれをやろうとしている方法です:
using (var dbContext = new BookContext())
{
var bookPages = dbContext
.Book
.Include(x => x.Pages)
.ThenInclude(x => x.Select(y => y.PageTitle))
.SingleOrDefault(x => x.BookId == "some example id")
.Pages
.Select(x => x.PageTitle)
.ToList();
}
しかし問題は、例外をスローすることです
ArgumentException:プロパティ式 'x => {from from y in x select [y] .PageTitle}'は無効です。式はプロパティアクセスを表す必要があります: 't => t.MyProperty'。複数のプロパティを指定する場合は、匿名タイプ「t => new {t.MyProperty1、t.MyProperty2}」を使用します。パラメーター名:propertyAccessExpression
何が問題なのか、正確にはどうすればよいのでしょうか?
PageTitle
でThenInclude
に直接アクセスしてみてください:
using (var dbContext = new BookContext())
{
var bookPages = dbContext
.Book
.Include(x => x.Pages)
.ThenInclude(y => y.PageTitle)
.SingleOrDefault(x => x.BookId == "some example id")
.Select(x => x.Pages)
.Select(x => x.PageTitle)
.ToList();
}