【问题标题】:LINQ to Entity, joining on NOT IN tablesLINQ to Entity,加入 NOT IN 表
【发布时间】:2010-04-06 18:38:29
【问题描述】:

我的大脑现在似乎是糊状的!我正在使用 LINQ to Entity,我需要从一个表中获取一些在另一个表中不存在的数据。

例如:我需要 TABLE A 中的 groupID、groupname 和 groupnumber,而 TABLE B 中不存在它们。groupID 以及其他相关信息将存在于 TABLE B 中。这些表没有任何关系。在 SQL 中它会很简单(有一个更优雅和高效的解决方案,但我想画出我需要的图片)

SELECT
   GroupID,
   GroupName,
   GroupNumber,
FROM
   TableA
WHERE
   GroupID NOT IN (SELECT GroupID FROM TableB)

是否有一种使用实体框架/LINQ to Entity 的简单/优雅的方法来做到这一点? 现在我有一堆查询访问数据库,然后比较等等。这很混乱。

【问题讨论】:

    标签: sql linq-to-entities


    【解决方案1】:

    你可以使用任何

      var temp =context.TableA
             .Where(x=>!context.TableB.Any(y=>y.GroupID!=x.GroupID))
             .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();
    

    【讨论】:

    • 内部子句应该是y => y.GroupID == x.GroupID吗? (如果TableB 中有任何项目与此GroupID,则返回 false)
    • @Hannele 从技术上讲,它是相同的,并且可能更具可读性。出于某种原因,我天生就是为了向后执行布尔逻辑。
    • 我同意 Hannele 的观点,我认为应该是 Where(x=> !context.TableB.Any(y=>y.GroupID==x.GroupID))
    • 这正是我想要的
    【解决方案2】:

    这取决于你是如何认识他们的,你没有展示出来,但是,一般来说:

    var q = from a in Context.TableA
            where !a.Group.TableBs.Any()
            select new
            {
                GroupID = a.GroupID,
                GroupName = a.GroupName,
                GroupNumber = a.GroupNumber
            };
    

    【讨论】:

      【解决方案3】:

      @Nix - 你的结果集应该是:

       var temp =context.TableA
               .Where(x=>context.TableB.Any(y=>y.GroupID != x.GroupID))
               .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();
      

      或者

      var temp =context.TableA
               .Where(x=> ! context.TableB.Any(y=>y.GroupID == x.GroupID))
               .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();
      

      但不是两者都有,就像你写的那样。

      【讨论】:

        猜你喜欢
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-12
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多