如何将SQL子查询转换为Linq?

时间:2015-11-15 19:54:02

标签: sql linq subquery

我需要将此查询翻译为Linq

SELECT m.Nombre, m.LugarSalida, m.FechaHorarioComienzo
FROM Maraton m 
WHERE m.FechaHorarioComienzo >= GETDATE()
  AND (m.MaxParticipantes + m.ParticipantesEnEspera) >
   (SELECT COUNT(*) as "Total de participantes"
    FROM ResultadoMaratonParticipante rm
    where rm.IdMaraton = m.IdMaraton
    GROUP BY rm.IdMaraton)

这包含一个子查询,我该怎么办?

谢谢!

注意:下一个完整代码

PW3_20152C_TP2_MaratonesEntities3 context = new PW3_20152C_TP2_MaratonesEntities3();

    //Obtengo el listado de maratones
    DateTime hoy = DateTime.Now;
    List<Maraton> qm = (from m in context.Maraton
                       where m.FechaHorarioComienzo >= DateTime.Now
                         && (m.MaxParticipantes + m.ParticipantesEnEspera) >
                           (from rm in context.ResultadoMaratonParticipante
                            where rm.IdMaraton = m.IdMaraton // Cannot convert query expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type  TPFinalWeb3 

                            select rm).Count()
                       select m).ToList();

1 个答案:

答案 0 :(得分:0)

并排

<强> SQL

SELECT m.Nombre, m.LugarSalida, m.FechaHorarioComienzo
FROM Maraton m 
WHERE m.FechaHorarioComienzo >= GETDATE()
  AND (m.MaxParticipantes + m.ParticipantesEnEspera) >
   (SELECT COUNT(*) as "Total de participantes"
    FROM ResultadoMaratonParticipante rm
    where rm.IdMaraton = m.IdMaraton)

<强> LINQ

from m in db.Maraton
where m.FechaHorarioComienzo >= DateTime.Now
  && (m.MaxParticipantes + m.ParticipantesEnEspera) >
    (from rm in db.ResultadoMaratonParticipante
     where rm.IdMaraton == m.IdMaraton
     select rm).Count()
select new { m.Nombre, m.LugarSalida, m.FechaHorarioComienzo }