不能隐式转换类型'& # 39; Webapplication1.models.Enrollment& # 39
本文关键字:Webapplication1 Enrollment models 转换 类型 不能 | 更新日期: 2023-09-27 18:03:14
我试图从数据库中计算学生的平均成绩,并选择计算值并将视图发送到请求其结果的客户端,但我得到了如下所示的错误。
我正试图响应一个学生用户提交的表单的请求。使用下面的linq查询,我计算了学生的GPA并选择了它,以便显示学生信息和要查看的学生GPA,但是我遇到了无法将匿名类型转换为模型的问题。
请问你能帮我如何匿名类型到模型类下面?
Enrollment Request = (from a in db.Enrollments
where a.StudentProfile.Matric_Number ==
e.StudentProfile.Matric_Number &&
a.Academic_SessionId == e.Academic_SessionId &&
a.SemesterId == e.SemesterId
join b in db.Courses on a.CourseId equals b.CourseId
join c in db.StudentProfiles on a.StudentId equals c.StudentId
group a by a.StudentProfile.Matric_Number into g
let GPA = (decimal)(g.Sum(a => a.GradePoint * a.Course.Credit) /
g.Sum(a => a.Course.Credit))
select new { GPA }).SingleOrDefault();
注册表
EnrollmentId
Academic sessionId
StudentId
CourseId
LetterGrade
LecturerId
SemesterId
GradePoint
Scores
UPDATE
正如我在前面的评论中提到的,您不能将GPA添加到实体模型中,因为它不代表数据库列。您将其视为计算的属性。所以你有几个选择。
一,你可以从你的查询中返回一个小数,它只代表GPA:
decimal Request = (...
select new GPA).SingleOrDefault();
您还可以在与包含GPA
属性的实体模型不同的名称空间中创建新的 Enrollment
模型。这些有时被称为Data Transfer Objects
。
select new DTOS.Enrollment { GPA = GPA }).SingleOrDefault();
由于目前在您的select
中返回匿名类型(由new {}
表示),您还可以将Response
的类型更改为var
,以便您可以直接访问返回的属性。请注意,在单个属性访问上下文中,这比第一个选项效率低,但它仍然是可能的,并且在访问多个属性时更有用:
var Request = (...
select new Enrollment { GPA = GPA }).SingleOrDefault();
var gpa = Request.GPA;