Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ-左联接,分组依据,求和,_C#_Sql_Linq - Fatal编程技术网

C# LINQ-左联接,分组依据,求和,

C# LINQ-左联接,分组依据,求和,,c#,sql,linq,C#,Sql,Linq,我有以下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 group by A.Recurso_Id

我有以下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 
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();
List _ListaSelect=(来自_lstrescos中的R)
加入C的行列
关于R.Id等于C.Recurso\u Id
按新的{C.Recurso_Id,R.Nombre}将R分组为total
选择新的选择()
{ 
Cantidad_Eventos=总计.Sum(R=>R.Id),
Recurso_Nombre=total.Max(R=>R.Nombre),
Recurso_Email=total.Max(R=>R.Email),
Recurso_Activo=总计.Max(R=>R.Activo),
Id\u Recurso=total.Max(R=>R.Id)
}).ToList();

但是,它不起作用。你能帮我吗?

我想你的查询可以简单得多

试试这个

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;
}
类程序
{
静态void Main(字符串[]参数)
{
var recs=新列表{
新的Recursos{Name=“Alex”,Email=“A”,RecursoID=1},
新递归{Name=“Juan”,Email=“B”,recurseoid=2},
新的Recursos{Name=“Peter”,Email=“C”,RecursoID=3},
新递归{Name=“Julios”,Email=“D”,recurseoid=4},
新递归{Name=“Dennis”,Email=“E”,recurseoid=5},
新的Recursos{Name=“Jhon”,Email=“F”,RecursoID=6},
};
var citas=新列表{
新的Citas{recurseOID=1,CitaID=1},
新的Citas{recurseOID=1,CitaID=2},
新的Citas{recurseOID=2,CitaID=3},
};
var citasbyRecurso=
从r到recs
在r上的citas中加入c。递归体等于c。递归体进入分裂
选择新的
{
recurseoid=r.recurseoid,
Name=r.Name,
Email=r.Email,
Count=cleft.Where(x=>x.recurseoid==r.recurseoid).Count(),
};
foreach(citasbyRecurso中的var项目)
{
WriteLine(string.Format(“{0}{1}{2}{3}”、item.recurseoid、item.Name、item.Email、item.Count));
}
Console.ReadLine();
}
}
类递归
{
公共int递归体;
公共字符串名称;
公共字符串电子邮件;
}
建训局
{
公共int递归体;
公共信息中心;
}

请解释它是如何工作的。默认情况下,LINQ
join
使用内部联接。SQL查询使用左联接。这就是为什么你会得到不同的结果。您必须使用
join。。。在里面在…上从。。。在x.DefaultIfEmpty()
模式中,在LINQ中获得左外部联接。在这种情况下,我想添加来自资源Id的所有内容,以了解有多少约会与资源关联,但它所做的是添加我拥有的所有数字资源Id我非常感谢您的帮助,这是我所需要的,谢谢您,它真的起作用了。。。。