通过1到多个导航属性过滤Linq / Odata查询

时间:2011-02-18 05:18:09

标签: linq entity-framework odata wcf-data-services linqpad

以下查询适用于我在导航属性计划上展开的情况,计划 AssociatedListing 属性具有多对1 关系:

from la in ListingAssociations.Expand("AssociatedListing").Expand("AssociatedListing/Schedules")
where la.ListingId==60
select la

在结果中,我可以看到与每个 AssociatedListing 对象相对应的多个 Schedule 对象。这很好。

但是,当我尝试在任何时间表字段上添加过滤器时:

from la in ListingAssociations.Expand("AssociatedListing").Expand("AssociatedListing/Schedules")
where la.ListingId==60 && la.AssociatedListing.Schedules.StartDate > DateTime.Today
select la

我收到错误:

  

“'System.Collections.ObjectModel.Collection'不包含'StartDate'的定义,也没有扩展方法'StartDate'接受类型为'System.Collections.ObjectModel.Collection'的第一个参数'... ”

所以我猜问题是 StartDate Schedule 类的字段,“ Schedules ”导航属性是一个集合计划对象,因此Schedules.StartDate没有任何意义。但必须有一些方法来指定这种多对1情况下的过滤器。怎么样?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

从此处更改 where 子句:

where la.ListingId==60 
   && la.AssociatedListing.Schedules.StartDate > DateTime.Today

对此:

where la.ListingId==60 
   && la.AssociatedListing.Schedules.All(x => x.StartDate > DateTime.Today)

如果您需要这样,以便任何计划的开始日期都大于今天(而不是过滤到所有计划的开始日期),请将All更改为Any