C# 如何确定是否在linq to sql中使用联接?
我只是想知道如何确定是否在C# 如何确定是否在linq to sql中使用联接?,c#,asp.net,sql-server,linq-to-sql,join,C#,Asp.net,Sql Server,Linq To Sql,Join,我只是想知道如何确定是否在linqtosql中使用join 假设我们有两张这样的桌子 Table 1 Customer id name Table 2 addresstype id address1 customerid 及 或 这两条路都是一样的。性能有什么不同吗 还有第二种方法,如果没有任何匹配,它会出现错误吗?基本上,这两个LINQ查询相当于以下SQL查询: select ad
linqtosql
中使用join
假设我们有两张这样的桌子
Table 1 Customer
id
name
Table 2 addresstype
id
address1
customerid
及
或
这两条路都是一样的。性能有什么不同吗
还有第二种方法,如果没有任何匹配,它会出现错误吗?基本上,这两个LINQ查询相当于以下SQL查询:
select ad.*
from Customer cu, AddressType ad
where cu.ID == ad.CustomerID -- I assume this was meant by the OP
及
这两个查询之间的差异主要是语义上的,因为数据库在这两种情况下都会执行相同的操作,并为两个查询返回相同的结果集
我更喜欢SQL和LINQ中的
join
语法,因为它定义了两个表/实体之间的显式关系,这仅在无连接版本中暗示。您使用的是LINQ到实体还是LINQ到SQL?如果是前者,则可以通过在模型中定义关系和使用导航属性来避免这两种情况。这将是做事情的最清晰的方式这些似乎是相同的查询,它们返回相同的结果,但我不知道哪一个可以更快,它应该是基准测试
但是,在linq2sql
的情况下,我更喜欢关联子查询而不是连接,因为当前如果不想检查等式2元素,应该使用以下语法:
new {X,Y} equals new {X',Y'}
在join中,如果您有多个表达式,则应将其转换为嵌套查询。因此,我更希望有一个可读性更强的代码,在差异操作中使用最小的差异。这两个查询之间不应该有差异。几个月前我自己也在想这个问题。我通过LINQPad验证了这一点。这是一个免费工具,您可以下载并实际查看任何LINQ查询(这是发送到数据库的查询)生成的SQL 对于这两个查询,生成的SQL应该相同
如果您是通过Visual Studio执行此操作的,那么还有一种方法可以查看生成的SQL。要将第三种也是更受欢迎的方法与LINQ To SQL混合使用,请使用表之间的关联(即使您没有在数据库中设置它们)。这样,您就可以在对象图中导航,而不用使用连接:
var query = from cu in Customer
from ad in cu.Addresses
select ad;
注意:当查询对象图时,LINQ to SQL将联接转换为左外联接,其中,缺省情况下,join/where语法是内部联接
当对象之间没有自然关系时,应该使用LINQ中的联接。例如,如果要查看与客户位于同一城市的商店列表,请使用联接。(加入Cuffel.Advest.Surity与Sturity,Addio.City)。你不能用我的建议:)下次可以考虑LINQ到实体!LINQ to SQL支持与EF的导航属性相同的关联。如果没有匹配项,则第二种方法不会出错。。。它不会产生任何结果,就像等价的SQL查询wouldFYI一样,LINQ to SQL要查看生成的SQL,只需在查询上调用.ToString即可。
select ad.*
from Customer cu
inner join AddressType ad on cu.id = ad.CustomerID;
new {X,Y} equals new {X',Y'}
var query = from cu in Customer
from ad in cu.Addresses
select ad;