繁体   English   中英

linq-to-sql连接多个from子句语法与传统连接语法

[英]linq-to-sql joins with multiple from clauses syntax vs. traditional join syntax

使用2 from子句和类似的where写一个连接有什么区别:

var SomeQuery = from a in MyDC.Table1
                from b in MyDC.Table2
                where a.SomeCol1 == SomeParameter && a.SomeCol2 === b.SomeCol1

续写join使用连接操作。

这是一个join 2台,但当然,有时候,我们需要加入更多的表,我们需要结合其他from条款与where ,如果我们选择上面的语法。

我知道两种语法查询都返回相同的数据,但我想知道是否存在性能差异或其他类型的差异,这将最终支持一种语法而不是另一种语法。

谢谢你的建议。

这两个问题实际上回答得很好。

INNER JOIN ON vs WHERE子句

INNER JOIN vs“FROM”中的多个表名

我已经包含了两个关于如何将三种不同的LINQ表达式转换为SQL的示例。

隐式连接:

from prod in Articles
from kat in MainGroups
where kat.MainGroupNo == prod.MainGroupNo
select new { kat.Name, prod.ArticleNo }

将被翻译成

SELECT [t1].[Name], [t0].[ArticleNo]
FROM [dbo].[Article] AS [t0], [dbo].[MainGroup] AS [t1]
WHERE [t1].[MainGroupNo] = [t0].[MainGroupNo]

内部联接:

from prod in Articles
join kat in MainGroups on prod.MainGroupNo equals kat.MainGroupNo
select new { kat.Name, prod.ArticleNo }

将被翻译成

SELECT [t1].[Name], [t0].[ArticleNo]
FROM [dbo].[Article] AS [t0]
INNER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo]

左外连接:

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 }

将被翻译成

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 这是一个很好的工具,可以找出这种东西。

var result = from a in DB.classA
from b in DB.classB
where a.id.Equals(b.id)
select new{a.b};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM