繁体   English   中英

EF4-多对多关系,使用包含和列表查询<int>

[英]EF4 - Many to many relationship, querying with contains and List<int>

我有一个使用EF4的asp.net C#应用程序连接到SQL Server数据库。

在数据库中,我在两个表( Officer表和Geography表)之间有很多对很多的关系-因此存在另一个名为OfficerGeography表,该表将OfficerGeography连接。

使用此数据库创建edmx图表,EF4可以正确看到这两个表之间的多对多关系。

问题
我有一个GeographyList<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上的实体,则应将其删除,并在OfficerGeography表之间添加关系/关联,并将该关系映射到联接表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM