web-dev-qa-db-ja.com

Entity Framework Coreにコレクションを含める

たとえば、これらのエンティティがあります。

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

何が問題なのか、正確にはどうすればよいのでしょうか?

23
Yurii N.

PageTitleThenIncludeに直接アクセスしてみてください:

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();
}
43
diiN__________