【问题标题】:LINQ - Where, Group SumLINQ - 哪里,组总和
【发布时间】:2017-09-27 21:02:41
【问题描述】:

我有这个 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 子句结尾。有人可以帮助我吗?

【问题讨论】:

    标签: c# sql linq where-clause


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      相关资源
      最近更新 更多