对Linq的复杂SQL查询

时间:2017-08-30 15:11:59

标签: c# sql linq count group-by

我需要在C#中将以下复杂的sql查询转换为Linq:

Select Empleador.NombreComercial as Empresa,
Vacante.Puesto as Vacante, 
Vacante.Actividades, 
COUNT(Vacante.CveVacante) as Visitas 
from Vacante 
LEFT JOIN Empleador on Empleador.CveEmpleador=Vacante.CveEmpleador  
LEFT JOIN VisitaVacante on Vacante.CveVacante = VisitaVacante.CveVacante
GROUP BY Empleador.NombreComercial,Vacante.Puesto, Vacante.Actividades, 
Vacante.CveVacante HAVING COUNT(*) > 1 ORDER BY Visitas DESC

目前我已经拥有以下内容:

var Visitas = (from tvacante in db.VacanteT
                           join tEmpleador in db.EmpleadorT on tvacante.CveEmpleador equals tEmpleador.CveEmpleador
                           join tVisitaVacante in db.VisitaVacanteT on tvacante.CveVacante equals tVisitaVacante.CveVacante
                           select new
                           {
                               Empresa = tEmpleador.NombreComercial,
                               Vacante = tvacante.Puesto,
                               tvacante.Actividades,
                               Visitas = tvacante.CveVacante

                           }).GroupBy( );

如何添加COUNT(Vacante.CveVacante) as Visitas以及

GROUP BY Empleador.NombreComercial,Vacante.Puesto, Vacante.Actividades, 
Vacante.CveVacante HAVING COUNT(*) > 1 ORDER BY Visitas DESC 

到我的linq查询?我找不到有关如何完成此操作的信息。桌子是tvacante,templeador和tvisitaVacante。

1 个答案:

答案 0 :(得分:1)

试试这个:

var Visitas =(from tvacante in db.VacanteT
              join tEmpleador in db.EmpleadorT on tvacante.CveEmpleador equals tEmpleador.CveEmpleador
              join tVisitaVacante in db.VisitaVacanteT on tvacante.CveVacante equals tVisitaVacante.CveVacante
              group new{tEmpleador.NombreComercial,tvacante.Puesto, tvacante.Actividades} by new {tEmpleador.NombreComercial,tvacante.Puesto, tvacante.Actividades} into g
              where g.Count()>1
              select new
              {
                 Empresa = g.Key.tEmpleador.NombreComercial,
                 Vacante =  g.Key.tvacante.Puesto,
                 Actividades= g.Key.tvacante.Actividades,
                 Visitas = g.Count()
              }).OrderByDescending(e=>e.Visitas);

如果您只想使用linq查询语法并且不合并两种语法,那么您也可以这样做:

var Visitas = from tvacante in db.VacanteT
              join tEmpleador in db.EmpleadorT on tvacante.CveEmpleador equals tEmpleador.CveEmpleador
              join tVisitaVacante in db.VisitaVacanteT on tvacante.CveVacante equals tVisitaVacante.CveVacante
              group new{tEmpleador.NombreComercial,tvacante.Puesto, tvacante.Actividades} by new {tEmpleador.NombreComercial,tvacante.Puesto, tvacante.Actividades} into g
              where g.Count()>1
              orderby g.Count() descending
              select new
              {
                 Empresa = g.Key.tEmpleador.NombreComercial,
                 Vacante =  g.Key.tvacante.Puesto,
                 Actividades= g.Key.tvacante.Actividades,
                 Visitas = g.Count()
              };