2017-09-04 146 views
0

我有这样的SQL代码:LINQ - 左加入,集团通过,点心,

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 
group by A.Recurso_Id,a.Recurso_Nombre, a.Recurso_Email,a.Recurso_Activo 

而且,我需要平移,到LINQ,其实我有这样的代码:

List<Select> _ListaSelect = (from R in _LstRecursos 
           join C in _LstCitas 
           on R.Id equals C.Recurso_Id 
           group R by new {C.Recurso_Id, R.Nombre} into total 
           select new Select() 
           { 
            Cantidad_Eventos = total.Sum(R=> R.Id), 
            Recurso_Nombre= total.Max(R=> R.Nombre), 
            Recurso_Email=total.Max(R=>R.Email), 
            Recurso_Activo=total.Max(R=>R.Activo), 
            Id_Recurso=total.Max(R=>R.Id) 
           }).ToList(); 

但是,这是行不通的。你可以帮我吗?

+2

请解释*如何*它不工作。 –

+0

LINQ'join'默认使用内部连接。您的SQL查询使用左连接。这就是为什么你会得到不同的结果。你必须使用'join ... in ... on ... into x from ... in x.DefaultIfEmpty()'模式来获得LINQ中的左外连接。 – MarcinJuraszek

+0

在这种情况下,我想添加来自Resource_Id的所有内容,知道有多少约会关联了一个资源,但是它的作用是添加我拥有的所有数字Resource_Id – Broodwing009

回答

1

我觉得你的查询可以更简单,

试试这个

var citasbyRecurso = 
      from r in recs 
      join c in citas on r.RecursoID equals c.RecursoID into cleft 
      select new 
      { 
       RecursoID = r.RecursoID, 
       Name = r.Name, 
       Email = r.Email, 
       Count = cleft.Where(x=>x.RecursoID == 
       r.RecursoID).Count(), 
      }; 

这是完整surce代码,所以你可以运行在一个控制台应用程序此查询

class Program 
{ 
    static void Main(string[] args) 
    { 
     var recs = new List<Recursos> { 
new Recursos { Name = "Alex", Email = "A", RecursoID= 1 }, 
new Recursos { Name = "Juan", Email = "B", RecursoID= 2 }, 
new Recursos { Name = "Peter", Email = "C", RecursoID= 3 }, 
new Recursos { Name = "Julios", Email = "D", RecursoID= 4 }, 
new Recursos { Name = "Dennis", Email = "E", RecursoID= 5 }, 
new Recursos { Name = "Jhon", Email = "F", RecursoID= 6 }, 
}; 
     var citas = new List<Citas> { 
new Citas { RecursoID= 1, CitaID = 1 }, 
new Citas { RecursoID= 1, CitaID = 2 }, 
new Citas { RecursoID= 2, CitaID = 3 }, 
}; 

     var citasbyRecurso = 
      from r in recs 
      join c in citas on r.RecursoID equals c.RecursoID into cleft 
      select new 
      { 
       RecursoID = r.RecursoID, 
       Name = r.Name, 
       Email = r.Email, 
       Count = cleft.Where(x=>x.RecursoID == r.RecursoID).Count(), 
      }; 

     foreach (var item in citasbyRecurso) 
     { 
      Console.WriteLine(string.Format("{0} {1} {2} {3}", item.RecursoID,item.Name,item.Email, item.Count)); 
     } 
     Console.ReadLine(); 
    } 
} 

class Recursos 
{ 
    public int RecursoID; 
    public string Name; 
    public string Email; 
} 

class Citas 
{ 
    public int RecursoID; 
    public int CitaID; 
} 
+0

非常感谢您的帮助,这是我需要什么,谢谢你,真的有效.... – Broodwing009