我有以下两个类代表我的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'。
有人请教育我做错了什么?
这部分是你的问题:
parent = (Parent)dc.Parents.Where(p => p.Parent_Id.Equals(parentId));
"Where"的输出是父级的集合,而不仅仅是单个父级。
在这种情况下,您可以使用"单个"或"第一个"而不是"位置"。
这部分代码返回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();
相关:无法使用 linq lambda 表达式强制转换类型为"System.Data.Entity.Infrastructure.DbQuery'1[]"的对象