LINQ - Where,Group Sum

时间:2017-09-27 21:02:41

标签: c# sql linq where-clause

我有这个SQL代码:

select A.Recurso_Id, sum(case when B.cita_id is null then 0 else 1 end) as Total_Eventos, a.Recurso_Nombre, a.Recurso_Email,a.Recurso_Activo
from Agenda_Recurso a left join Agenda_Cita B
on A.Recurso_Id=B.Recurso_Id
where B.Cita_Fecha_Final > getdate()
group by A.Recurso_Id, a.Recurso_Nombre, a.Recurso_Email, a.Recurso_Activo

而且,我需要转向LINQ,实际上我有这个代码:

public List<Recurso> Cantidad_Eventos_Recurso(string pConexion, long pEmpresa, long pSucursal)
{
    DateTime dt = DateTime.Now;
    List<TRegAgendaCita> _LstCitas = MetodosEnLinea.Catalogo.AgendaEvento_Lista(pConexion, pSucursal);
    List<TRegAgendaRecurso> _LstRecursos = MetodosEnLinea.Catalogo.AgendaRecurso_Lista(pConexion, pEmpresa);

    if (_LstCitas == null)
        return null;

    List<Recurso> _ListaSelect = (from Recursos in _LstRecursos
                                  join Citas in _LstCitas on Recursos.Id equals Citas.Recurso_Id  
                                  where Citas.Fecha_Final > dt
                                  into cleft
                                  select new Recurso()
                                  {
                                      Cantidad_Eventos = cleft.Where(x => x.Recurso_Id == Recursos.Id).Count(),
                                      Nombre = Recursos.Nombre,
                                      Email = Recursos.Email,
                                      Activo = Recursos.Activo,
                                      Id = Recursos.Id
                                   })
                                   .ToList();

    return _ListaSelect;
}

但是,在我想要购买今天的最后日期的部分中,他告诉我他错了,他说:查询正文必须以select子句或group子句结束。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

查询的语法应如下所示:

from Recursos in _LstRecursos
join Citas in _LstCitas.Where(c => c.Fecha_Final > dt) // notice the where moved here
on Recursos.Id equals Citas.Recurso_Id
into cleft
select new Recurso()
{
    Cantidad_Eventos = cleft.Where(x => x.Recurso_Id == Recursos.Id).Count(),
    Nombre = Recursos.Nombre,
    Email = Recursos.Email,
    Activo = Recursos.Activo,
    Id = Recursos.Id
}

您不能在into之后在查询语法中放置where子句。如果你想要查询语法,你可以使用它,这有点冗长:

from Recursos in _LstRecursos
join Citas in 
    from c in _LstCitas
    where c.Fecha_Final > dt
    select c
on Recursos.Id equals Citas.Recurso_Id
into cleft
select new Recurso()
{
    Cantidad_Eventos = cleft.Where(x => x.Recurso_Id == Recursos.Id).Count(),
    Nombre = Recursos.Nombre,
    Email = Recursos.Email,
    Activo = Recursos.Activo,
    Id = Recursos.Id
}