[英]EF4 - Many to many relationship, querying with contains and List<int>
我有一个使用EF4的asp.net C#应用程序连接到SQL Server数据库。
在数据库中,我在两个表( Officer
表和Geography
表)之间有很多对很多的关系-因此存在另一个名为OfficerGeography
表,该表将OfficerGeography
连接。
使用此数据库创建edmx图表,EF4可以正确看到这两个表之间的多对多关系。
问题
我有一个Geography
的List<int>
,它对应于Geography
表的主键。
我希望使用此列表来检索具有出现在此列表中的geographyId的军官。 我认为以下LINQ可以工作:
var geographyIds = new List<int>() { 1, 2, 3, 4, 5 };
var officers = db.Officers.Where(o => o.Enabled == true && geographyIds.Contains(o.Geographies.GeographyId));
但是,这失败了。 实际上,intellisense不会列出o.Geographies
任何列(由于多对多关系)。
如何获取与GeographyId匹配的人员列表?
附加说明
OfficerGeography
数据库表没有出现,因为它是EF4中自己的实体。 EF4只能正确看到“ Officer
和“ Geography
,并且在两个实体上都具有从一个到另一个的导航属性。
怎么样
var officers = db.Officers
.Where(o => o.Enabled == true
&& o.Geographies.Any(g => geographyIds.Contains(g.Id)));
geographyIds.Contains()以一个int作为参数,但每个人员可能具有多个地理位置,因此使用any-method逐个检查它们。
EF是将联接表映射为关系还是作为实体包含在其中?
如果已将其作为一个实体包含在内,则可能需要尝试
o.OfficerGeographies.GeographyId
不过,这还不是全部答案。 如果将OfficerGeographies
表映射到OfficerGeographies
上的实体,则应将其删除,并在Officer
和Geography
表之间添加关系/关联,并将该关系映射到联接表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.