我有以下表格
Clubs
- Id
- Name
Members
- Id
- ClubId linked to Clubs.Id
- Name
如何在LINQ中编写一个查询,该查询将为我提供一份没有任何成员的俱乐部列表?
PS:这里的术语应该是什么?会员表是俱乐部表的*。 (不是父母和孩子,但是?)
答案 0 :(得分:3)
如何在LINQ中编写一个查询,它将为我提供一个俱乐部列表 没有任何成员?
你可以这样做:
from m in db.Members
where !db.Clubs.Any( c => (c.Id == m.ClubId))
select m;
关于第二个问题:
应该是正确的术语吗?成员表是*的 俱乐部表。 (不是父母和孩子,但是?)
不,不是。这不是父母与子女的关系,因为成员可以在俱乐部中存在。您的案例中Members
和Clubs
之间的关系是a,他们在UML中称为 聚合 。但父母和孩子的关系或他们所谓的 组合 ,即 有一个 关系,子对象可以'与父母一起存在。那不是你的情况。
答案 1 :(得分:1)
这会为您提供没有成员的俱乐部列表:
from c in db.Clubs
where !db.Members.Any( m => m.ClubId == c.Id)
select c;
但我怀疑这样做的正确方法是与中间表的多对多关系。 (您的数据可能是一个例外?)如果您属于3个俱乐部,您会在会员表中记录3次吗?如果ClubId在Members表中,您必须这样做。必须对3条记录进行地址变更。这不是正确的方法。
所以从会员表中删除ClubId并添加一个只有MemberId和ClubId的Members_Clubs表,可以让你将一个会员与很多俱乐部联系起来。
然后声明如下:
from c in db.Clubs
where !db.Members_Clubs.Any( mc => mc.ClubId == c.Id)
select c;
在此,实体既不是“父”,也不是“孩子”。这使它们成为关联实体。