实体框架列表将所有属性返回到映射模型

时间:2016-05-15 06:39:33

标签: c# entity-framework

我有三个班级:学生,科目和成绩。

public class Grades
{
    [Key]
    public int Id { get; set; }
    public Student Student { get; set; }
    public Subject Subject { get; set; }
    public int Year { get; set; }
    public string Grade { get; set; }
}

学生班

 public class Student
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string Nationality { get; set; }
    }

主题类

public class Subject
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
}

我想要返回所有成绩但是扩展了学生和主题的属性,比如 我可以访问 的 Grade.Name

Grade.Gender

Grade.Nationality

Grade.Year

Grade.Grade

而不是 的 Grade.Student.Name

Grade.Student.Gender

Grade.Student.Nationality

2 个答案:

答案 0 :(得分:1)

使用这些表达式来扩展您的数据。请注意,它们不属于Grade类,但它们将是具有所需属性的匿名类。如果需要将这些项传递给其他方法,则必须创建具有这些属性的显式类。否则,您可以使用相同的方法直接访问它们。比如,expandedGrades.First().Name

var expandedGrades =
    DBContext.Grades.Select(grade =>
    new
    {
        Name = grade.Student.Name,
        Gender = grade.Student.Gender,
        Nationality = grade.Student.Nationality,
        Year = grade.Year,
        Grade = grade.Grade
    });

var expandedGrades =
                from grade in DBContext.Grades
                select new
                {
                    Name = grade.Student.Name,
                    Gender = grade.Student.Gender,
                    Nationality = grade.Student.Nationality,
                    Year = grade.Year,
                    Grade = grade.Grade
                };

答案 1 :(得分:0)

假设您在学生,科目和成绩表之间设置了适当的关系。在实体框架中,您可以使用 .include 来完成工作。

一个基本的例子:

Blog blogs = context.Blogs 
                    .Include(b => b.Posts) 
                    .ToList(); 

现在可以直接使用blogs.Posts

参考:https://msdn.microsoft.com/en-in/data/jj574232.aspx