c# - 将 SQL 查询转换为 C#

标签 c# mysql linq

我有以下 SQL 查询:

SELECT
 s.name, count(sc.id) AS classes
FROM
 students s
 LEFT JOIN studentsclasses sc ON s.id = sc.studentid
GROUP BY s.name
HAVING count(sc.id) = 0
ORDER BY count(sc.id);

该查询获取学生类(class)数并返回类(class)最少的学生。

如何将其转换为 C#?我的尝试没有产生预期的结果。我有:

var query = (from students in ent.Students
                         join classes in ent.StudentsClasses on students.ID equals classes.StudentID into gj
                         from subpet in gj.DefaultIfEmpty()
                         select new { students.Name }).ToList();

然而,这会返回在类(class)中注册的所有学生的所有姓名。

================================

这是表格:

==================
StudentsClasses  
----------------
ID (Registration ID of the class)
StudentID (ID of student taking class)
ClassID (ID of certain class)
----------------
==================

Students
---------------
ID (ID of student)
Name (Name of student)
GradeLevelID (Grade of student)
---------------
==================

最终查询

 var query = (from students in ent.Students
                         join classes in ent.StudentsClasses on students.ID equals classes.StudentID into gj
                         from subpet in gj.DefaultIfEmpty()
                         orderby students.StudentsClasses.Count
                         where students.StudentsClasses.Count == 0
                         select new { students.Name }).ToList();

最佳答案

编辑:固定语句

IEnumerable<IGrouping<Student, Student>> query = from student in ent.Students
    join studentClass in ent.StudentClasses on student.Id equals studentClass.StudentId into studentClassesJ
    from studentClass in studentClassesJ.DefaultIfEmpty()
    group student by student
    into studentGroup
    select studentGroup;

IEnumerable<Student> result = query.Where(x => x.Count() == query.Min(y => y.Count())).Select(x => x.Key);

请注意,尽管您声明您的 SQL 查询将返回上课次数最少的学生,但由于 HAVING count(sc.id) = 0,您的 SQL 仅返回根本没有类的用户。 我提供的 LINQ 语句没有被过滤,而只是按类的数量排序,但您应该能够使用所需的过滤来扩展它。

关于c# - 将 SQL 查询转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29869076/

相关文章:

php - SQL 使用 PHP 递归更新表

c# - 使用 IEqualityComparer 根据 C# 中的两个属性生成不同的列表

c# - 如何将通用属性作为参数传递给函数?

c# - 是否可以记录序列化从 Web 服务返回的对象所花费的时间?

c# - 如何使用 C# 将 html 文本转换为 utf-8

PHP 从另一个 URL 加载到 MySQL

mysql - 如何为多个表中的值添加 SQL 约束

c# - 使用 XPath 查找所有 JavaScript 类型脚本元素

c# - 使用依赖注入(inject)在构造函数之外创建类的新实例

c# - 如何根据生日计算年龄