Par exemple, j'ai ces entités:
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; }
}
Comment dois-je charger tous les PageTitles, si je ne connais que le BookId?
Voici comment j'essaie de faire ceci:
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();
}
Mais le problème est qu'il jette l'exception
ArgumentException: l'expression de propriétés 'x => {des pages y dans x sélectionnez [y] .PageTitle}' n'est pas valide. L'expression doit représenter un accès à la propriété: 't => t.MyProperty'. Lorsque vous spécifiez plusieurs propriétés, utilisez un type anonyme: 't => new {t.MyProperty1, t.MyProperty2}'. Nom du paramètre: propertyAccessExpression
Qu'est-ce qui ne va pas, que dois-je faire exactement?
Essayez d'accéder à PageTitle
directement dans 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();
}