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
}