【发布时间】:2016-04-02 17:06:27
【问题描述】:
我正在学习实体框架,我需要一些解释。
假设我已经创建了一些多对多关系,因此我们有表Students 和Courses,并且每种类型的实体可以有许多其他类型的实体。
接下来,我有一个网格视图,我想在其中显示包含两列描述学生姓名和分配给他的所有课程的表格。为此,在我的WebForm 的Page_Load 事件中,我有以下代码:
protected void Page_Load(object sender, EventArgs e)
{
MyModel dbContext = new MyModel();
GridView1.DataSource = from student in dbContext.Students
.Include("Courses").ToList()
select new
{
Name = student.StudentName,
Courses = string.Join(",", student.Courses.Select(c => c.CourseName))
};
GridView1.DataBind();
}
现在它可以工作了,但请注意,Entity Framework 并没有真正分析查询,因为行:
GridView1.DataSource = from student in dbContext.Students.Include("Courses").ToList()
使此查询由 LINQ to Objects 提供程序分析。如果我不使用ToList() 方法而是我想写:
var query = from student in dbContext.Students.Include("Courses")
select new { ... };
GridView1.DataSource = query.ToList();
GridView1.DataBind();
那么我有一个例外,Entity Framework 无法识别 Join() 方法。我可以接受,但猜想如果查询由 EF 的引擎分析,应用程序会运行得更快,对吗?
如果是这样,我如何重写代码,将字符串分配给我的匿名类型的 Courses 属性以获得相同的结果?
【问题讨论】:
标签: c# sql asp.net entity-framework linq