我有一个使用EF4连接到SQL Server数据库的asp.net C#应用程序。
在数据库中,我在两个表Officer
和Geography
之间存在多对多的关系 - 因此存在另一个名为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只能正确地看到Officer
和Geography
,两个实体上的导航属性从一个到另一个。
答案 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上的实体,则应删除它并在Officer
和Geography
表之间添加关系/关联,并将该关系映射到连接表