【问题标题】:Linq Left outer join QueryLinq左外连接查询
【发布时间】:2017-01-11 03:48:57
【问题描述】:

如何将此sql查询转换为Linq查询?

select * 
from setupUOMs as su 
LEFT OUTER JOIN scmSKUUoMs as ssu
   on su.UoMID != ssu.UoMID
where ssu.SKUID = 446 and su.UMTypeID = 5

以下是 linq 查询。

from c in setupUOMs
        join o in scmSKUUoMs
           on c.UOMID equals o.UoMID into sr
        from x in sr.DefaultIfEmpty()
        where x.SKUID == 446 
        select x 

在上面的查询中,到目前为止我只提取了连接号,但我想要的是选择左表的不相等记录,但我能够显示连接记录。它只返回左表的记录,而我的结果基于两列。在 where 子句中,我可以访问来自左表的 x.SKUID,但无法访问来自右表的 x.UMTypesID(意味着没有返回右表中的列,我可以在其上创建条件)。

【问题讨论】:

  • 由于您在where 中检查ssu.SKUID = 446,您可以改用内部连接。
  • 我已经在 scmSKUUoMs 上对表 setupUOMs 进行了左外连接,并返回了 setupUoMs 的不匹配记录。希望您了解 Arnold..
  • magnus 我没有采用内连接我正在尝试采用左外连接...
  • @Zeb-ur-Rehman 但是由于您在where 中检查ssu.SKUID = 446 ssu 永远不可能是null(左连接可能会给您)对吗?
  • @Zeb-ur-Rehman 我明白了,但是您在 linq 中尝试了什么?在提出问题时,您真的应该表现出一些研究成果。

标签: sql-server linq


【解决方案1】:

看看这个 LEFT JOIN LINQTOSQL 示例。

http://www.devcurry.com/2011/01/linq-left-join-example-in-c.html

也许会有所帮助。

【讨论】:

    【解决方案2】:

    具有不等于条件的联接不是联接,而是不包括内部联接记录的笛卡尔积。像您一样进行查询可能有充分的理由,但始终存在导致记录数过多的结果集的风险。

    所以让我们假设条件确保结果是有意义的,那么你可以这样做:

    from su in setupUOMs
    from ssu in scmSKUUoMs // from .. from is a Cartesian product
    where su.UOMID != ssu.UoMID
                    && ssu.SKUID == 446 
                    && su.UMTypeID == 5
    select new { su.Prop1, ssu.Prop2, ... }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      相关资源
      最近更新 更多