EF, как преобразовать этот запрос в SQL?

select a.* from Atleta a
inner join AtletiGare ag on ag.AtletaId=a.AtletaId
where ag.Pettorale=10

 public class Atleta
    {

        [Required]
        [Key]
        public int AtletaId { get; set; }
        public ICollection<AtletiGare> AtletiGare { get; set; }
}
    public class AtletiGare
    {
        [Required]
        [Key]
        public int AtletiGareId { get; set; }
        [Required]
        public int AtletaId { get; set; }
        public Atleta Atleta { get; set; }
        public int Pettorale { get; set; }

}
IList<Atleta> atletaList = new List<Atleta>();

мне нужно, чтобы все атлеты отфильтровывались по atletigare.pettorale==10, но я постараюсь включить collection(_context.Atleta.Include(x => x.AtletiGare)) в атлету, коллекция atletiGare не является фильтром


person MAtteo Fedeli    schedule 20.03.2020    source источник


Ответы (1)


Вы можете попробовать это:

atletaList = (from a in db.Atleta
              join ag in db.AtletiGare on ag.AtletaId equals a.AtletaId
              where ag.Pettorale == 10
              select new a()
              {
                  AtletaId = a.AtletaId,
                  AtletiGare = a.AtletiGare
              }).ToList();

Что касается вашего комментария, это еще один способ сделать то, что вы хотите:

atletaList = (from a in db.Atleta
              select new a()
              {
                  AtletaId = a.AtletaId,
                  AtletiGare = a.AtletiGare.Where(y=> y.Pettorale == 10).ToList()
              }).ToList();

ПРИМЕЧАНИЕ. Имейте в виду, что лучший способ сделать то, что вы хотите, — это либо использовать соединение, либо выполнить явную загрузку с помощью Includes, как вы сделали сами. Другие возможные способы сделать то, что вы хотите, например, второй ответ, который я опубликовал, будут выполнять несколько обращений к базе данных, что не очень хорошо для производительности.

person gwt    schedule 20.03.2020
comment
Я тоже могу это сделать _context.Atleta.Include(x =› x.AltetiGare)... как установить WHERE atletigare.pettorale==10? - person MAtteo Fedeli; 20.03.2020