C# 加入Linq的最佳方式

C# 加入Linq的最佳方式,c#,linq,join,comparison,C#,Linq,Join,Comparison,我正在使用下面的第一种方法,但后来我找到了第二种方法,我想知道它们之间的区别,以及哪种方法最好 以下两者之间的区别是什么: from a in this.dataContext.reglements join b in this.dataContext.Clients on a.Id_client equals b.Id select... 及 我创建了一个测试用例来测试差异,在您的场景中,结果证明它们是相同的 我的测试示例使用了AdventureWorks,但基本上两者之间存在关联 产品-

我正在使用下面的第一种方法,但后来我找到了第二种方法,我想知道它们之间的区别,以及哪种方法最好

以下两者之间的区别是什么:

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


我创建了一个测试用例来测试差异,在您的场景中,结果证明它们是相同的

我的测试示例使用了AdventureWorks,但基本上两者之间存在关联

产品->类别->类别

生成以下SQL:

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

生成以下sql:

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

这两种语法之间的区别在于它们转换为SQL的方式。您可以跟踪实体框架或LINQ到SQL以确定SQL:

LINQ到SQL:


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

第二个SQL是否会转换为ANSI样式的联接?为什么要在内存中进行?这也是有效的SQL,不是吗?你确定吗?L2S无法从SQL中的子句生成多部分的。@Esteban:这不是“ANSI风格”的联接;这是一种遗留样式的联接,因为将近10年前ANSI SQL-92规范中引入了
join
子句。@Adam:感谢您的澄清。所以“前ANSI风格”应该是正确的,对吗?@Adam现在正在设置linq2sql测试以查看输出。我用数据服务做了一个,它做了很多选择,然后做了一个where。
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();
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID]
FROM [Products] AS [t0]
INNER JOIN [Categories] AS [t1] ON [t0].[CategoryID] = ([t1].[CategoryID])