Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定是否在linq to sql中使用联接?_C#_Asp.net_Sql Server_Linq To Sql_Join - Fatal编程技术网

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;