Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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# 获取列表中的响应。将sql更改为Linq查询以聚合数据_C#_Mysql_Sql_Linq - Fatal编程技术网

C# 获取列表中的响应。将sql更改为Linq查询以聚合数据

C# 获取列表中的响应。将sql更改为Linq查询以聚合数据,c#,mysql,sql,linq,C#,Mysql,Sql,Linq,我正在做一个项目,为学生们取得学校成绩 每班 public class StudentResponse{ public string StudentName {get;set} public string StudentClass {get;set;} public IEnumberable<StudentGradesTests> StudentGrades {get;set;} } public class StudentGradesTests {

我正在做一个项目,为学生们取得学校成绩 每班

public class StudentResponse{
    public string StudentName {get;set}
    public string StudentClass {get;set;}
    public IEnumberable<StudentGradesTests> StudentGrades {get;set;}
}


public class StudentGradesTests
{
    public string Subject {get;set;}
    public int NumberOfTestsforEachClass {get;set;}
    public decimal TotalMarks {get;set;}

}
数据库中的数据

Tables
Students             Classes    
id | Name       id  | class | studentid 
1  | Mark       1   |  5th  |  1
2  | Adam       2   |  6th  |  2

SubjectDetails 
id  | class    | classId | studentid | Tests | Marks
1   | Science  |  1      |   1       |  1    |  80
2   | Science  |  1      |   1       |  1    |  90
3   | Science  |  1      |   1       |  1    |  85
4   | Science  |  1      |   2       |  1    |  100
5   | Science  |  1      |   2       |  1    |  76
我有一个返回所有这些的查询,但我很难将其更改为Linq

SELECT st.id, st.Name,c.class,sd.subject,
count(sd.tests) as NumberOfTestsforeachClass, SUM(sd.Marks) as TotalMarks
from Students st 
    inner join Classes c on st.id = c.studentid 
    inner join SubjectDetails sd
    inner join on sd.classId = c.id AND sd.studentid = c.studentid
GROUP BY st.id,st.Name,c.Class
现在我想在上面提到的响应中将此sql更改为Linq

var response = from st in students
           join c in classes on st.id equals c.studentid
           join sd in subjectDetails on sd.classId equals c.id && sd.studentid equals c.studentid
           group st.id,st.Name,c.Class into res
           select new StudentResponse
               {
                StudentName = res.key.Name,
                StudentClass = res.key.Class
                StudentGrades = // Not sure what do I need here. Need some help here to create a list of StudentGrades
                }


需要帮助以可枚举的形式获取学生成绩测试响应,而不是对同一班级的一名学生进行多个学生响应

您是否可以向我们展示输出的预期格式。LINQ不是SQL。这是EF或NHibernate等ORM使用的语言。如果您创建了适当的关系,就不必自己编写连接。您可以在st.Details组中的st from sd学生中使用
,将新的{st.Id,st.Name,sd.Class.Class}插入g…
@Rakesh Hi Rakesh,问题中有一个答案。学生成绩测试应该是每个班级每个学生的一份清单。如果你有任何问题,请告诉我。我们可以聊聊
var response = from st in students
           join c in classes on st.id equals c.studentid
           join sd in subjectDetails on sd.classId equals c.id && sd.studentid equals c.studentid
           group st.id,st.Name,c.Class into res
           select new StudentResponse
               {
                StudentName = res.key.Name,
                StudentClass = res.key.Class
                StudentGrades = // Not sure what do I need here. Need some help here to create a list of StudentGrades
                }