我正在使用下面的第一种方法,但后来我找到了第二种方法并且想知道差异,哪种方法最好。
有什么区别:
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...
答案 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以确定是否存在可能影响性能的差异。