C# 从EF代理对象返回IQueryable

C# 从EF代理对象返回IQueryable,c#,entity-framework,linq-to-sql,entity-framework-6,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{ 公共int Id{get;set;} 公共字符串名称{get;set;} 公共虚拟ICollection YCollection{get;set;} }

假设我有以下
DbSet

public class X {
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Y> YCollection { get; set; }
}
公共类X{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection YCollection{get;set;}
}
当我想要检索
X
的第1项时,我执行
DbSet.Find(1)返回一个EF代理对象

既然这个代理对象(
X
)包含multiply
Y
,我想将
YCollection
检索为
IQueryable
。(主要是在从数据库检索之前对其进行一些额外的筛选。)


如何将
YCollection
检索为
IQueryable

我知道无法直接从实体本身执行此操作,但您可以使用上下文本身来形成查询:

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

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

您可以为此使用LINQ扩展方法:

using System.Linq;

//....

x.YCollection.AsQueryable();

但随后它将作为LINQ to对象而不是LINQ to实体执行。因此,如果您只需要IQueryable对象,而不需要它来解决性能问题,您可以使用它

IQueryable还是IQueryable?@KirillBestemyanov感到困惑,编辑:)这不允许他过滤数据库中的集合;这是客户端。帮助我度过了周末!:在一些反射的帮助下,这个酒窝看起来很有魅力!有一种方法可以做到这一点吗?或者有
没有
方法可以做到这一点。。。你不能只漏掉一句话,伙计。
using System.Linq;

//....

x.YCollection.AsQueryable();