【发布时间】:2017-03-31 12:47:45
【问题描述】:
我在 C# 中遇到以下异常:
InvalidCastException:无法从类型转换 'System.Collections.Generic.List`1[MyProj.Data.Entities.Student]' 到 输入“MyProj.Data.Access.IStudent”。
我的项目编译成功。我有两个对象定义如下:
public interface IStudent
{
long ID { get; set; }
string SystemCode { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
DateTime DateOfBirth { get; set; }
}
public class Student : IStudent
{
public long ID { get; set; }
public string SystemCode { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
public interface ICourseRequest
{
long ID { get; set; }
long StudentID { get; set; }
int CourseID { get; set; }
int? FacultyID { get; set; }
DateTime StartDate { get; set; }
DateTime CreationDate { get; set; }
IStudent Student { get; set; }
}
public class CourseRequest : ICourseRequest
{
public long ID { get; set; }
public long StudentID { get; set; }
public int CourseID { get; set; }
public int? FacultyID { get; set; }
public DateTime StartDate { get; set; }
public DateTime CreationDate { get; set; }
public IStudent Student { get; set; }
}
我正在使用 SQLtoLinq 检索我的数据(从 SQL Server),如下所示:
IList<ICourseRequest> result = _database.course_requests.Select(a => new CourseRequest
{
CreationDate = a.crsreq_create_date,
StartDate = a.crsreq_start,
FacultyID = a.crsreq_faculty,
ID = a.crsreq_id,
CourseID = a.crsreq_crs,
StudentID = a.crsreq_student,
Student = _database.students.Where(p => p.stud_id == a.crsreq_student)
.Select(s => new Student
{
ID = p.stud_id,
DateOfBirth = s.stud_dob,
FirstName = s.stud_fname,
LastName = s.stud_lname,
SystemCode = s.stud_sys_code
}).SingleOrDefault(),
}).ToList<ICourseRequest>();
为什么在项目编译成功时在运行时抛出这个转换异常?
【问题讨论】:
-
它在哪一行?你确定它来自那个sn-p代码吗?
-
错误是不言自明的:您试图将
List<Student>转换为接口IStudent,这是无效的。错误是在什么情况下出现的? -
@TetsuyaYamamoto 但我在嵌套选择的末尾有一个 SingleOrDefault()
-
@Rob 错误在查询中
-
@progrAmmar,您可以尝试在
SingleOrDefault()之前添加ToList()调用。我很好奇它是否与导致强制转换异常的查询执行方式有关。
标签: c# asp.net asp.net-mvc collections