Entity Framework выбирает со многими таблицами один ко многим

#c# #sql-server #entity-framework #select #entity-framework-core

#c# #sql-сервер #сущность-фреймворк #выберите #сущность-структура-ядро

Вопрос:

С тремя таблицами ниже:

введите описание изображения здесь

Связь:

  1. Автор — один к одному с биографией автора
  2. Автор — один ко многим с AuthorPrix

и я бы выполнил запрос, используя синтаксис метода в ядре EF, и выбрал, чтобы ограничить возвращаемые поля.

 SELECT a.FirstName, a.LastName, ab.Biography, ap.PrixName
FROM dbo.Author AS a
LEFT JOIN dbo.AuthorBiography AS ab ON a.AuthorId = ab.AuthorRef
LEFT JOIN dbo.AuthorPrix AS ap ON a.AuthorId = ap.AuthorRef
 

Я могу сделать так:

 var a = dbCtx.Author
                .Include(b => b.AuthorBiography)
                .Include(c => c.AuthorPrixes)
                .Select(a => new { a.FirstName, a.LastName, a.AuthorBiography.Biography })
                .ToList();
 

Но я не могу добавить поле [Имя приза] к выбору.
Все еще возможно с помощью простого выбора или я должен использовать соединение?

Заранее спасибо за вашу помощь.

Ответ №1:

Вы можете добавить SelectMany в свой запрос linq следующим образом:

 var a = dbCtx.Author
        .Include(b => b.AuthorBiography)
        .Include(c => c.AuthorPrixes)
        .SelectMany(a => a.AuthorPrixes)
        .Select(a => new { a.PrixName, a.Author.FirstName, a.Author.LastName, a.Author.AuthorBiography.Biography })
                .ToList();
 

Комментарии:

1. Ребята, почему вы добавляете Include для пользовательского проектирования?

2. Спасибо за помощь, я забыл ответить вам и проверить флаг принятого ответа.