想象一下,我有以下DbSet
:
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 :(得分:3)
我无法直接在我所知道的实体本身之外执行此操作,但您可以使用上下文本身来构成查询:
var x = context.DbSet<X>.Find(1);
var query = context.Entry(x).Collection(x => YCollection).Query();
我想这可以包含在扩展方法中,如下所示:
x.YCollection.AsQueryable(context);
答案 1 :(得分:-1)
你可以使用LINQ扩展方法:
using System.Linq;
//....
x.YCollection.AsQueryable();
但是它会以LINQ to Objects而不是LINQ to Entities的形式执行。因此,如果您只需要一个IQueryable对象而不需要它来解决性能问题,那么您可以使用它。