Public Function LoadSiteInfo(ByVal sId As Integer) As IQueryable(Of Site)
Return Me.ObjectContext.Sites.Include("SiteData").Where((Function(f) f.SiteID = sId) AndAlso Function(x) x.SiteData.SiteUpdateDate < today))
End Function
所以,我试图在Site表中过滤SiteId上的SiteId,在SiteData表中的SiteUpdateDate上过滤ANDALSO,这是我无法正确获取语法的最后一部分 - 它只是说SiteUpdateDate属性不是ObjectContext.Site,它是SiteData
的一部分如何过滤所包含的表SiteData中的属性?或者我如何重写这个并仍然返回一个Iquerable of Site与SiteData childtable beeing过滤我想要的?应该真的很容易,但我很挣扎,开始相信包含一个选定父级的过滤子集合是不允许的...... :(
答案 0 :(得分:1)
我不相信你可以这样做。您必须先使用子集合返回您的父级。
Public Function LoadSiteInfo(ByVal sId As Integer) As IQueryable(Of Site)
return FillSiteInfo(sId).Where(Function(x) x.SiteData.SiteUpdateDate < today))
End Function
Public Function FillSiteInfo(byVal sId as Integer) as IQueryable(of Site)
Return Me.ObjectContext.Sites.Include("SiteData").Where((Function(f) f.SiteID = sId).AsQueryable()
End Function
那对你有用。
您还需要检查您的RIA服务,以确保您的Child Collection已将[include]作为属性。
答案 1 :(得分:1)
我对VB不好,所以这是C#版本。
return this.ObjectContext
.Sites
.Where(x => x.SiteData.All(y => y.SiteUpdateData < today))
.Where(x => x.SiteId == sId)
.Select(x => new { Sites = x, SiteDatas = x.SiteData })
.Select(x => x.Sites);
诀窍是,你不能过滤一个渴望加载的属性(SiteData
),所以你必须使用匿名类型投影,然后将查询投影回你想要的。