加入Linq的最佳方式

时间:2011-07-08 18:11:04

标签: c# linq join comparison

我正在使用下面的第一种方法,但后来我找到了第二种方法并且想知道差异,哪种方法最好。

有什么区别:

from a in this.dataContext.reglements
join b in this.dataContext.Clients on a.Id_client equals b.Id 
select...

from a in this.dataContext.reglements
from b in this.dataContext.Clients
where a.Id_client == b.Id 
select...

2 个答案:

答案 0 :(得分:6)

我创建了一个测试用例来测试差异,并且在你的场景中它们是相同的。

我的测试示例使用了AdventureWorks,但基本上

之间存在关联
  

产品> CategoryId->分类

var q = (
    from p in Products
    from c in Categories
        where p.CategoryID==c.CategoryID
    select p
);

q.ToList();

生成此SQL:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID]
    FROM [Products] AS [t0], [Categories] AS [t1]
WHERE [t0].[CategoryID] = ([t1].[CategoryID])

var q2 = (
    from p in Products 
    join c in Categories 
        on p.CategoryID equals c.CategoryID
    select p);

q2.ToList();

生成这个sql:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID]
FROM [Products] AS [t0]
INNER JOIN [Categories] AS [t1] ON [t0].[CategoryID] = ([t1].[CategoryID])

答案 1 :(得分:2)

这两种语法之间的区别在于它们被转换为SQL的方式。您可以跟踪Entity Framework或LINQ to SQL以确定SQL:

LINQ to SQL:http://www.reflectionit.nl/Blog/PermaLinkcba15978-c792-44c9-aff2-26dbcc0da81e.aspx

检查生成的SQL以确定是否存在可能影响性能的差异。

相关问题