2012-01-31 46 views
0
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 

所以,我試圖從站點表上SITEID篩選,ANDALSO在SiteUpdateDate在SiteData表,它的最後一部分,我不能讓正確的語法 - 它只是說SiteUpdateDate屬性不是ObjectContext.Site的成員,這是正確的SiteData的一部分加入兩個表和篩選結果使用EF 4和RIA服務

如何過濾包含的表SiteData中的屬性?或者我怎樣才能重寫這個,並仍然返回一個SiteData的可調用的孩子表格beeing過濾,因爲我想?應該是很容易的,但我很掙扎,開始相信包括一個選定的父母的過濾子集合是不允許的... :(

回答

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服務,以確保您的孩子募捐計劃[包括]作爲屬性。

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)過濾器,所以你必須使用匿名類型的投影,然後投影查詢返回到你想要的東西。