基于子表中的实体在linq查询中过滤父/子表(一对多关联)?

时间:2010-07-09 17:07:55

标签: .net vb.net linq

我有一个表(Projects),它链接到projectID上的projectVersions

projectVersions包含几个列,我想在其中过滤返回的项目(以及关联的projectVersions)列表。例如,有一个“容量”列和一个“国家/地区”列。我在一个页面上做了一个过滤的项目列表,我想包括所有项目,其中任何一个相关的projectVersions容量为750ml,国家为“法国”。

可能是某个特定参数未设置,因此我传递零以表示不对其进行过滤。

我想这需要某种子查询,就像我尝试做这样的事情一样:

  thisList = (From p In dc.tblProjects _  
             Where ((Brand = 0) Or (p.Brand = Brand)) _  
             And ((brandVariant = 0) Or (p.brandVariant = brandVariant)) _  
             And ((sizeCapacity = 0) Or (p.tblProjectVersions.sizeCapacity.xxx = sizeCapacity)) _  
                                 Order By p.dateCreated Ascending _  
                                 Select p).ToList  

它不能作为“xxx”位,一对多,我希望我指定一个项目来获取其中的实体,但我想查询任何相关版本匹配其中一个标准。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,问题出在

 Or (p.tblProjectVersions.sizeCapacity.xxx = sizeCapacity)

由于“tblProjectVersions”是一个集合,并且您想要查找“任何”关联版本的匹配条件,请执行以下操作:

 Or (p.tblProjectVersions.Any(Function(t) t.sizeCapacity.xxx = sizeCapacity))

这将检查表格中是否有任何具有相应“sizeCapacity”的元素。