4

我有以下表格

Clubs
- Id
- Name

Members
- Id
- ClubId linked to Clubs.Id
- Name

如何在 LINQ 中编写一个查询,它会给我一个没有任何成员的俱乐部列表?

PS:这里的正确术语应该是什么?members 表是 Clubs 表的 *。(不是父母和孩子,而是?)

4

2 回答 2

3

如何在 LINQ 中编写一个查询,它会给我一个没有任何成员的俱乐部列表?

你可以这样做:

from m in db.Members
where !db.Clubs.Any( c => (c.Id == m.ClubId))
select m;

对于你的第二个问题:

这里应该是正确的术语吗?members 表是 Clubs 表的 *。(不是父母和孩子,而是?)

不它不是。这不是父子关系,因为成员可以在没有俱乐部的情况下存在。Members在您的情况下和之间的关系Clubs是他们在 UML 中所说的Aggregation。但是父子关系或他们所谓的组合,即关系,子对象不能没有父对象而存在。这不是你的情况。

于 2012-11-18T01:10:51.780 回答
1

这为您提供了没有会员的俱乐部列表:

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;

在这种情况下,两个实体都不是“父母”或“孩子”。这使它们成为关联实体。

于 2012-11-18T03:57:45.010 回答