【问题标题】:How to write a Linq to entity statement, using sql not in operator [duplicate]如何使用不在运算符中的 sql 编写 Linq to entity 语句[重复]
【发布时间】:2012-04-04 20:53:19
【问题描述】:

可能重复:
“NOT IN” clause in LINQ to Entities

我使用下面的架构,我想知道如何在 LINQ to Entities 中编写 sql 查询。

SQL 代码:

Select * 
FROM GROUEPUSERS G
WHERE G.IDGROUPE NOT IN (SELECT IDGROUPE
                         FROM  APPARTENIR
                         WHERE IDCLIENT = id)

ID 是我将恢复的变量。问题是表APPARTENIR变成了导航表。

我找到了解决方案以防万一:

var groups = from g in context.GROUPEUSER 
    where !g.UTILISATEUR.Select(d => d.ID).Contains(id)
    select g;

【问题讨论】:

  • 你好,谢谢你的回答,但我只是实体框架的初学者,我不知道如何处理它,我正在阅读一些教程,我正在进步,但在这里我需要一些帮助,
  • 你的APPARTENIR实体在你的截图中在哪里?在您的屏幕截图中,我看不到哪些列和表映射到哪些实体和属性。
  • 这就是我生成实体时的问题,它没有给我一个名为 APPARTENIR 的实体,其中包含 UTILISATEUR 和 GROUPEUSER 的主键,它只是将其转换为 NAVIGATION PROPERTY

标签: asp.net-mvc linq linq-to-entities


【解决方案1】:

你可以这样写:

 var query = myEntities.Groupeusers
     .Where(gu => !myEntities.Utilisateur.Any(ut => ut.idgroupe == gu.idgroupe)).ToList();

应该可以的。

编辑:

试试那个查询:

 var query = myEntities.Groupeusers
     .Where(gu => !myEntities.Utilisateur
                .SelectMany(ut=>ut.Groupeuser)
                .Any(gu => gu.Idgroupe == gu.Idgroupe)).ToList();

或者甚至更好:

 var query = myEntities.GroupeUsers
     .Except(myEntities.Utilisateur.SelectMany(ut => ut.Groupeuser))
     .ToList();

EDIT2:

如果我理解您的查询是正确的,您想确定一个特殊的用户实体。

var query = myEntities.GroupeUsers 
     .Except(myEntities.Utilisateur.Where(u => u.IdUser == id).SelectMany(ut => ut.Groupeuser)) 
     .ToList(); 

【讨论】:

  • 谢谢 BitKFu 但我无法从实体 UTILISATEUR 获得 IDGROUP 它只是给了我 ut.GROUPEUSERS 而不是属性 IDGROUPE
  • 我认为问题在于,您没有在实体模型中映射链接表APPARTENIR。这确实是这里缺少的链接。
  • 你有没有教程或课程可以帮助我理解更多,因为我读过的所有教程都不是具体的。无论如何感谢您的帮助:)
  • 以及我恢复的 ID 变量我应该把它放在哪里 PS:我使用了第二个查询:var query = myEntities.GroupeUsers .Except(myEntities.Utilisateur.SelectMany(ut => ut.Groupeuser)) .ToList();@BitKFu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多