2013-11-29 88 views
3

我最近开始在linq上工作,我想知道是否假设我有两个相关的表项目(< = with fkAccessLevelId)和AccessLevel,我只想从两个表中选择值。现在有两种方法可以从这些表中选择值。使内部连接linq或使用[table]。[joinedTable] .column是否相同?

一个我常用的使用方法是:

(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 
} 

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

回答

0

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

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

但在你的情况下,这两个查询有一个非常真实的区别。没有访问级别的项目不会出现在第一个查询中,而第二个查询将返回一个空的AccessName。实际上,您会将LEFT JOININNER JOIN进行比较。

TL:DR对于SQL Server/Linq to Entity执行相同操作的框架查询应该具有相似的性能。然而,你的查询是非常相似。