我有两个代表我的SQL表的类(由ADO.net实体数据模型生成):
public partial class Parent
{
public Parent()
{
this.Students = new HashSet<Student>();
}
public int Parent_Id { get; set; }
public string Parent1_Last_Name { get; set; }
public string Parent1_First_Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
public partial class Student
{
public int Student_Id { get; set; }
public string Student_Last_Name { get; set; }
public string Student_First_Name { get; set; }
public int Parent_Id { get; set; }
public virtual Parent Parent { get; set; }
}
现在我试图通过以下方法从表中读取数据:
var parent = new Parent();
var students = new List<Student>();
using (var dc = new SchoolDataEntities())
{
students = dc.Students.Where(s => s.Parent_Id.Equals(parentId)).ToList();
parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId));
parent.Students = students;
}
当我从Parent
表(Students
表工作正常时)我收到运行时“无效转换”异常错误。
错误:System.InvalidCastException:'无法将类型为'System.Data.Entity.Infrastructure.DbQuery`1 [SchoolApplication.Parent]'的对象强制转换为'SchoolApplication.Parent'。'
有人请告诉我我做错了什么吗?
答案 0 :(得分:0)
这部分是你的问题:
parent = (Parent)dc.Parents.Where(p => p.Parent_Id.Equals(parentId));
&#34;其中&#34;的输出是父母的集合,而不仅仅是单亲。
你可以使用&#34; Single&#34;或者&#34;第一&#34;而不是&#34;哪里&#34;在这种情况下。
答案 1 :(得分:0)
此部分代码返回IQueryable
集合而不是单Parent
个模型:
parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId));
出于这个原因,您需要使用Parent
或FirstOrDefault()
将查询具体化为SingleOrDefault()
模型:
parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId)).FirstOrDefault();
parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId)).SingleOrDefault();