2014-01-17 72 views
2

使用'from'子句或'join'子句时加入多个表时有区别吗?返回的结果集是相同的。Linq to实体来自vs加入

在多对多的关系(包括结表)就拿三个表:学生,StudentCourses,课程:

var query = from student in context.Students 
      from studentcourse in student.StudentCourses 
      where studentcourse.CourseID == 4 
      select student; 


var query = from student in context.Students 
      join studentcourse in context.StudentCourses 
      on student.StudentID equals studentcourse.StudentID 
      where studentcourse.CourseID == 4 
      select student; 
  1. 要么他们是最好的做法?
  2. 表现?这个比那个好吗?我还没有机会到SQL Profiler中的任何一个。

我使用包括以下两个原因避免:

  1. 我需要条件包括往往不是,因此上述两种技术。
  2. 从我读过的内容,包括返回整个相关的表,可能是性能的征税。

回答

0

在内部,LINQ to Entities将创建两个不同的查询,其中第一个示例将使用WHERE,第二个将加入表。但是这对性能没有影响,因为SQL优化器将为这两个查询创建相同的执行计划。见Inner join vs Where

明智的最佳实践,第一个选项几乎总是可取的。使用导航属性使您的代码更易于阅读和理解,并消除了必须自己加入表格的麻烦。