EF如何转换此查询SQL?

时间:2020-03-20 09:48:33

标签: c# entity-framework .net-core

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过滤的所有atleta,但是 我会尝试将collection(_context.Atleta.Include(x => x.AtletiGare))包含在atleta中,而不过滤掉atletiGare所在的集合

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

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进行显式加载,就像您自己做的那样。其他可行的方式(例如,我发布的第二个答案)将对数据库进行多次往返,这对性能不利。