linq-to-sql joins with multiple from clauses syntax vs. traditional join syntax
像这样使用2个
1 2 3 | var SomeQuery = from a in MyDC.Table1 from b in MyDC.Table2 where a.SomeCol1 == SomeParameter && a.SomeCol2 === b.SomeCol1 |
并使用join运算符编写
这是针对2个表上的
我知道两个语法查询都返回相同的数据,但是我想知道是否存在性能差异或另一种差异,这最终将使一种语法优于另一种语法。
感谢您的建议。
这两个问题实际上回答得很好。
INNER JOIN ON与WHERE子句
INNER JOIN与" FROM"中的多个表名称
我提供了两个示例,说明如何将三种不同的LINQ表达式转换为SQL。
隐式联接:
1 2 3 4 | from prod in Articles from kat in MainGroups where kat.MainGroupNo == prod.MainGroupNo select new { kat.Name, prod.ArticleNo } |
将被翻译成
1 2 3 | SELECT [t1].[Name], [t0].[ArticleNo] FROM [dbo].[Article] AS [t0], [dbo].[MainGroup] AS [t1] WHERE [t1].[MainGroupNo] = [t0].[MainGroupNo] |
内部联接:
1 2 3 | from prod in Articles join kat in MainGroups on prod.MainGroupNo equals kat.MainGroupNo select new { kat.Name, prod.ArticleNo } |
将被翻译成
1 2 3 | SELECT [t1].[Name], [t0].[ArticleNo] FROM [dbo].[Article] AS [t0] INNER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] |
左外连接:
1 2 3 4 | from prod in Articles join g1 in MainGroups on prod.MainGroupNo equals g1.MainGroupNo into prodGroup from kat in prodGroup.DefaultIfEmpty() select new { kat.Name, prod.ArticleNo } |
将被翻译成
1 2 3 | SELECT [t1].[Name] AS [Name], [t0].[ArticleNo] FROM [dbo].[Article] AS [t0] LEFT OUTER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] |
如果要测试将表达式转换为SQL的方式,建议您尝试LINQPad。 这是解决此类问题的绝佳工具。
1 2 3 4 |