【问题标题】:How to do this query in Linq?如何在 Linq 中进行此查询?
【发布时间】:2020-05-21 20:48:54
【问题描述】:

查询如下

var consulta = db.Alumnos.From(SELECT dbo.Alumnos.IdAlumno, Nombres + ' ' + Apellido1 + ' ' + Apellido2 AS Alumno FROM dbo.SolicitudCurso INNER JOIN dbo.Alumnos ON dbo.SolicitudCurso.IdAlumno = dbo.Alumnos.IdAlumno INNER JOIN dbo.Asistencia ON dbo.Asistencia.IdCurso = dbo.SolicitudCurso.IdCurso WHERE dbo.SolicitudCurso.IdCurso = id  AND dbo.Alumnos.IdAlumno NOT IN(SELECT dbo.Asistencia.IdAlumno FROM dbo.Asistencia WHERE dbo.Asistencia.IdDiasCurso = IdDiasCurso)");

我需要在Linq中使用但是我无法适应Linq的语法这是代码

 ViewBag.IdAlumno = new SelectList((from sc in db.SolicitudCursos
                                    join a in db.Alumnos on sc.IdAlumno equals a.IdAlumno
                                    join ss in db.Asistencias on sc.IdCurso equals ss.IdCurso
                                    where sc.IdCurso == id 
                                    select new
                                           {
                                               a.IdAlumno,
                                               Alumno = a.Nombres + " " + a.Apellido1 + " " + a.Apellido2
                                           }).ToList(), "IdAlumno", "Alumno");

【问题讨论】:

    标签: c# sql asp.net-mvc linq


    【解决方案1】:

    你大部分时间都在那里。看起来您正在苦苦挣扎的部分是 NOT IN 查询。目前尚不清楚IdDiasCurso 的来源,但我认为这些方面的内容应该适合您:

    ...
    where sc.IdCurso == id 
    ...
    

    此外,LINQ 和 SQL 之间的直接转换通常并不理想。 LINQ 往往更简单,更能表达你真正想要的东西。如果您的数据库模型设置有导航属性,您通常可以避免显式连接。由于您没有在最终的select 中使用scss,因此您可以将这些连接替换为where.Any() 调用。

    例如:

    from a in db.Alumnos 
    where a.SolicitudCursos.Any(sc => sc.Asistencias.Any() 
        && !db.Asistencias.Any(ss => ss.IdDiasCurso == sc.DiasCurso))
    select new
    {
        a.IdAlumno,
        Alumno = a.Nombres + " " + a.Apellido1 + " " + a.Apellido2
    }
    

    【讨论】:

    • 我没有很好地解释我的问题,但我已经得到了我需要的结果,非常感谢你的帮助
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多