У меня есть база данных книг, в которой есть ICollection авторов. Я хочу вернуть объект author на основе AuthorId с помощью LINQ.
Book db
int BookId
string Name { get; set; }
public ICollection<Author> Authors { get; set; }
Author db
int AuthorId
string Name
ICollection<Quote> Quotes { get; set; }
ICollection<Penname> Pennames { get; set; } - Edit: Added for clarity
Я пробовал:
var test = _context.Book.Include(x => x.Authors).Include("Authors.Quotes")
.Select(y => y.Authors)
Что дало мне:
EntityQueryable<ICollection<Authors>>
[0] {HashSet<Author>} [0]{Author} [1]{Author} [3]{Author}
[1] {HashSet<Author>} [0]{Author} [1]{Author}
[2] {HashSet<Author>} [0]{Author} [1]{Author}
Я просто не могу понять, как выполнять итерацию, хотя авторы в списке авторов. Примерно так:
var id = 2
var test = _context.Book.Include(x => x.Authors).Include("Authors.Quotes")
.Select(y => y.Authors.Select(x => x.Author).Where(x => x.AuthorId == id))
Если я когда-нибудь сделаю серьезное обновление, я мог бы использовать эластичный ...
Обновление @Marko Papic:
Спасибо. Странно, если я использую приведенное ниже, чтобы получить список книг с авторами, я получаю списки цитат и псевдонимов, которые заполняются, как я ожидаю
var test = _context.Book.Include(x => x.Authors)
.ThenInclude(x => x.Quotes)
.Include(x => x.Authors)
.ThenInclude(x => x.Pennames)
Однако, если я использую SelectMany, тогда кавычки и псевдонимы заканчиваются как нуль
var test = _context.Book.Include(x => x.Authors)
.ThenInclude(x => x.Quotes)
.Include(x => x.Authors)
.ThenInclude(x => x.Pennames)
.SelectMany(x => x.Authors).Where(x => x.AuthorId == id);
Author myauthor
int AuthorId = 2
string Name = "Bob"
ICollection<Quote> Quotes = null
ICollection<Penname> Pennames = null