从EF代理对象返回IQueryable

时间:2015-07-10 15:01:52

标签: c# entity-framework linq-to-sql entity-framework-6

想象一下,我有以下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>

2 个答案:

答案 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对象而不需要它来解决性能问题,那么您可以使用它。