制作内连接linq或使用[table]。[joinTable] .column是一样的吗?

时间:2013-11-29 06:08:53

标签: performance linq

我最近开始研究linq,我想知道我有2个相关的表Project(< = with fkAccessLevelId)和AccessLevel,我想只从两个表中选择值。现在有两种方法可以从这些表中选择值。

我经常使用的是:

(from P in DataContext.Projects
join AL in DataContext.AccessLevel
on P.AccessLevelId equals AL.AccessLevelId
select new
{
 ProjectName = P.Name,
 Access = AL.AccessName
}

另一种方法是:

(from P in DataContext.Projects
select new
{
 ProjectName = P.Name,
 Access = P.AccessLevel.AccessName
}

我想知道的是,如果我们用包含数千条记录的1-2个表增加表5-6的数量,这些方法中的哪一种是有效的??

1 个答案:

答案 0 :(得分:0)

您应该看看生成的SQL。您必须了解Linq查询中有几个主要的性能瓶颈(在这种情况下,我假设一个OMG ... Linq to SQL?!?!)通常的主要瓶颈是服务器上的SQL查询。

通常SQL Server有一个非常好的优化器,所以实际上,给定相同的查询,重构,perf是非常统一的。

但是在您的情况下,两个查询之间存在非常明显的差异。没有访问级别的项目不会出现在第一个查询中,而第二个查询将返回null AccessName。实际上,您需要将LEFT JOININNER JOIN进行比较。

TL:DR对于执行相同操作的SQL Server / Linq to Entity Framework查询应该提供类似的性能。但是,您的查询远非类似。