2015-07-10 85 views
1

想象我有以下DbSet返回的IQueryable從EF代理對象

public class X { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Y> YCollection { get; set; } 
} 

當我想要檢索的X項目1我執行DbSet<X>.Find(1);返回我的EF代理對象。現在

,這個代理對象(X)包含乘Y的,我想找回YCollection作爲IQueryable<Y>。 (主要是在從數據庫中檢索它之前對其進行一些額外的過濾。)

如何檢索YCollection作爲IQueryable<Y>

+0

IQueryable 或IQueryable ? –

+0

@KirillBestemyanov感到困惑,編輯:) –

回答

3

有沒有辦法做到這一點直接關閉實體本身,我所知道的,但你可以使用上下文本身形成查詢:

var x = context.DbSet<X>.Find(1); 

var query = context.Entry(x).Collection(x => YCollection).Query(); 

我想這可以在一個被包裹起來使用類似的擴展方法:

x.YCollection.AsQueryable(context); 
+0

在一些反射的幫助下實現了這一點,並像魅力一樣工作! –

+0

有'A'的方式來做到這一點?或者沒有辦法做到這一點......你不能只留下話語的人。 – Suamere

-1

你可以使用這個LINQ擴展梅索德:

using System.Linq; 

//.... 

x.YCollection.AsQueryable(); 

但是它會執行LINQ到對象而不是LINQ to Entities。所以你可以使用這個,如果你只需要一個IQueryable對象而不需要它來解決性能問題。

+0

這不允許他過濾數據庫上的集合;這是做客戶端。 – Servy

+0

幫助我度過了這個週末! :d –