将数据从一对多关系 SQL 表读取到我的模型中



我有以下两个类代表我的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[]"的对象

最新更新