【问题标题】:LINQ2SQL - Cross join emitted when I want inner joinLINQ2SQL - 当我想要内部连接时发出交叉连接
【发布时间】:2009-09-01 16:38:27
【问题描述】:

这会发出内部连接,这是我想要的并且可以工作:

var q =
    from itm in esdc.items
    join itmImg in esdc.itemImages on itm.itemId equals itmImg.itemId
    join itmIdent in esdc.itemIdentities on itm.imgIdentityId equals itmIdent.itemIdentityId
    join startImgs in esdc.vStartPgImgs on itmImg.imgId equals startImgs.imgId
    select ...

这也有效,但发出了交叉连接。如何获得内部联接?我仔细检查了实体和关系是否正确。

var q =
    from itmIdent in esdc.itemIdentities
    from itm in itmIdent.items
    from itmImg in itm.itemImages
    join startImgs in esdc.vStartPgImgs 
        on itmImg.imgId equals startImgs.imgId
    select ...

如果您需要我发布发出的 SQL 和实体设置,请告诉我。

【问题讨论】:

  • 你为什么在乎?任何理智的 RDBMS 都会在显式内部连接和带有过滤器的交叉连接上做同样的事情。

标签: linq linq-to-sql sql-server-2008


【解决方案1】:

简单地说:如果你使用第一种形式,你会得到内部连接。多个 from 子句表示 LINQ 中的交叉连接(有点像 1)。

基本上,如果您想要内部连接,请使用多个 join 子句。


1(我之所以这么说是因为后续的序列可能依赖于之前的序列……但对于 LINQ to SQL,它们几乎总是交叉连接。)

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2011-03-14
    • 2022-01-23
    • 2017-10-07
    • 2010-10-14
    • 2019-01-10
    相关资源
    最近更新 更多