EF4 - 多对多关系,使用contains和List <int> </int>查询

时间:2011-02-21 12:50:43

标签: c# entity-framework-4 linq-to-entities contains

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

在数据库中,我在两个表OfficerGeography之间存在多对多的关系 - 因此存在另一个名为OfficerGeography的表,它连接了两个表。

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

问题
我有List<int> geographyIds,它对应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只能正确地看到OfficerGeography,两个实体上的导航属性从一个到另一个。

2 个答案:

答案 0 :(得分:1)

怎么样

var officers = db.Officers
    .Where(o => o.Enabled == true 
        && o.Geographies.Any(g => geographyIds.Contains(g.Id)));

geographyIds.Contains()接受一个int作为参数,但每个官员可能有几个地理位置,因此any-method用于逐个检查。

答案 1 :(得分:0)

EF是否将联接表映射为关系或是否包含为实体?

如果它已作为实体包含在内,您可能需要尝试

o.OfficerGeographies.GeographyId

但这不是完整的答案。如果OfficerGeographies表映射到edmx上的实体,则应删除它并在OfficerGeography表之间添加关系/关联,并将该关系映射到连接表