手动输入sql以映射到c#对象,就像.Include(“”)方法

时间:2015-06-29 15:04:04

标签: c# sql-server linq entity-framework

这里简单的示例模型。我的模特由一位有很多学生的老师组成。

public class Teacher
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Student> Students { get; set; }
        public Teacher()
        {
            Students = new List<Student>();
        }
    }
    public class Student
    {
        public int Id { get; set; }
        public int TeacherId { get; set; }
        [ForeignKey("TeacherId")]
        public Teacher Teacher { get; set; }
        public string Name { get; set; }
    }

使用EntityFramework我可以轻松地使用linq

让所有老师和他们的学生
context.Teachers.Include("Students");

但是,如果我正在处理需要包含许多子属性的大型模型集,则此查询可能需要一些时间。

我的子问题是,如果我链接这个linq语句并选择一个只有我需要的教师属性的新视图模型,然后选择所有学生进入我的学生视图模型,只有我需要的属性等等。 这会像手动编写sql一样高效吗? Entityframework会增加开销吗?

现在回答我真正的问题。如何手动编写此查询以包含子属性并以自动绑定到我的视图模型的方式返回它?

示例:

select Teacher.Id, Teacher.Name, Student.Id, Student.Name
from Teachers
inner join Students on Teacher.Id = Student.TeacherId

2 个答案:

答案 0 :(得分:2)

要执行此操作,您根本不会使用// Uncomment the following line to display an Edit button in the navigation bar for //this view controller. self.navigationItem.rightBarButtonItem = self.editButtonItem() ,而只是使用Include

Select

答案 1 :(得分:1)

例如,使用匿名类型。

var q = from t in Teachers
select new {
    Id = t.Id,
    Name = t.Name,
    Students = t.Students.Select(x => new {
        Id = x.Id,
        Name = x.Name
    })
};

但您也可以声明DAO类型。