代码之家  ›  专栏  ›  技术社区  ›  Broodwing009

LINQ-其中,组和

  •  0
  • Broodwing009  · 技术社区  · 8 年前

    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;
    }
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jakub Dąbek    8 年前

    查询的语法应如下所示:

    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
    }