以下查询适用于我在导航属性计划上展开的情况,计划与 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情况下的过滤器。怎么样?
非常感谢任何帮助!
答案 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
。