我有以下表格
Clubs
- Id
- Name
Members
- Id
- ClubId linked to Clubs.Id
- Name
如何在 LINQ 中编写一个查询,它会给我一个没有任何成员的俱乐部列表?
PS:这里的正确术语应该是什么?members 表是 Clubs 表的 *。(不是父母和孩子,而是?)
我有以下表格
Clubs
- Id
- Name
Members
- Id
- ClubId linked to Clubs.Id
- Name
如何在 LINQ 中编写一个查询,它会给我一个没有任何成员的俱乐部列表?
PS:这里的正确术语应该是什么?members 表是 Clubs 表的 *。(不是父母和孩子,而是?)
如何在 LINQ 中编写一个查询,它会给我一个没有任何成员的俱乐部列表?
你可以这样做:
from m in db.Members
where !db.Clubs.Any( c => (c.Id == m.ClubId))
select m;
对于你的第二个问题:
这里应该是正确的术语吗?members 表是 Clubs 表的 *。(不是父母和孩子,而是?)
不它不是。这不是父子关系,因为成员可以在没有俱乐部的情况下存在。Members
在您的情况下和之间的关系Clubs
是他们在 UML 中所说的Aggregation。但是父子关系或他们所谓的组合,即有关系,子对象不能没有父对象而存在。这不是你的情况。
这为您提供了没有会员的俱乐部列表:
from c in db.Clubs
where !db.Members.Any( m => m.ClubId == c.Id)
select c;
但我怀疑正确的方法是与中间表建立多对多关系。(您的数据可能是个例外?)如果您属于 3 个俱乐部,您的记录会在会员表中出现 3 次吗?如果 ClubId 在 Members 表中,则必须这样做。必须对 3 条记录进行地址更改。这不是正确的方法。
因此,从 Members 表中删除 ClubId 并添加一个仅包含 MemberId 和 ClubId 的表 Members_Clubs 将允许您将单个成员与多个俱乐部相关联。
然后语句将如下所示:
from c in db.Clubs
where !db.Members_Clubs.Any( mc => mc.ClubId == c.Id)
select c;
在这种情况下,两个实体都不是“父母”或“孩子”。这使它们成为关联实体。