使用 GroupBy 选择 Max(),使用 linq 方法语法,EF

灵族

我有一堆带有一些数据的类:

public class Teacher
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime bDate { get; set; }
    //One-to-one with course

    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}


public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection <Student_Course> Student_Courses { get; set; }
    public int TeacherId { get; set; }
    public virtual Teacher Teacher { get; set; }
}


public class Grade
{
    public int Id { get; set; }
    public int Mark { get; set; }
    //one-to-many with Student_Course

    public int Student_CourseId { get; set; }
    public Student_Course Student_Course { get; set; }
}

public class Student_Course
{
    public int Id { get; set; }
    //many-to-many with student
    public int StudentId { get; set; }
    public virtual Student Student { get; set; }

    //many-to-many with course
    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}

 public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime bDate { get; set; }
    //one-to-many with student_course
    public virtual ICollection <Student_Course> Student_Courses { get; set; }

}

现在我尝试编写一个查询 - 对于每个老师(姓名)都需要通过学生成绩输出他最好的学生(姓名),以及最好的成绩,从班级成绩,我的代码:

public IActionResult Task9()
    {
        var task9 = Db.Grades.GroupBy(gr => gr.Student_Course.Course.Teacher.Name).Select(x => new Task9
        {
            NameOfSt = x.Select(st => st.Student_Course.Student.Name).FirstOrDefault(),//Needs to correct this line
            NameOfTeac = x.Select(r => r.Student_Course.Course.Teacher.Name).FirstOrDefault(),
            BestMark = x.Max(gr => gr.Mark)


            //NameOfSt = Db.Students.FirstOrDefault(st => st.Id ==x.FirstOrDefault().Student_Course.StudentId).Name
        });
        return View(task9);
    }

以便代码输出正确的教师姓名和学生对课程的最佳分数。但学生名实际上是错误的。我该如何解决?谢谢你的帮助。

Teac BestMark NameStud

达米安·米沃什

您可以在选择学生姓名之前按 Mark 使用 OrderByDescending:

var task9 = Db.Grades.GroupBy(gr => gr.Student_Course.Course.Teacher.Name).Select(x => new Task9
    {
        NameOfSt = x.OrderByDescending(st => st.Mark).Select(st => st.Student_Course.Student.Name).FirstOrDefault(),//Needs to correct this line
        NameOfTeac = x.Select(r => r.Student_Course.Course.Teacher.Name).FirstOrDefault(),
        BestMark = x.Max(gr => gr.Mark)        
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Linq where IN使用方法语法

来自分类Dev

尝试使用LINQ方法语法将GroupBy与多个属性一起使用时出现问题

来自分类Dev

使用LINQ查询语法而不是方法语法的AsNoTracking

来自分类Dev

然后Groupby使用Lambda / Linq选择数据

来自分类Dev

使用方法语法将SQL“ IN”作为LINQ查询

来自分类Dev

使用 LINQ 方法语法从多个表返回数据

来自分类Dev

Linq使用max选择单个值

来自分类Dev

动态创建GroupBy并使用EF选择

来自分类Dev

使用GroupBy的Linq查询

来自分类Dev

在LINQ中使用GroupBy

来自分类Dev

LINQ GroupBy中的使用方法

来自分类Dev

选择使用LINQ和EF过滤

来自分类Dev

LINQ使用扩展方法语法在具有不同记录的多列上联接

来自分类Dev

如何使用LINQ方法语法计算子集合的项数?

来自分类Dev

使用 Entity Framework Core 方法语法为组选择一条记录

来自分类Dev

使用Linq选择ID

来自分类Dev

LINQ使用.split()选择

来自分类Dev

Linq:在GroupBy中使用变量

来自分类Dev

使用LINQ从可为空的int字段中选择Max

来自分类Dev

使用Linq使用方法语法在相关表中查找表中具有特定值的所有记录

来自分类Dev

需要返回带有计数的GroupBy数据,但需要使用LINQ选择多个字段

来自分类Dev

如何在C#中使用Linq方法语法检索具有相同外键ID的多个列值?

来自分类Dev

使用.GroupBy()方法将此SQL查询转换为LINQ

来自分类Dev

使用linq选择字典的列表

来自分类Dev

使用linq与组嵌套选择

来自分类Dev

使用linq选择字典的列表

来自分类Dev

使用LINQ从IEnumerable中选择

来自分类Dev

无法使用LINQ选择XElement

来自分类Dev

使用Linq选择特定元素