[英]Return IQueryable from EF proxy object
假设我有以下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>
?
没有办法直接在我所知道的实体本身上执行此操作,但是您可以使用上下文本身来构成查询:
var x = context.DbSet<X>.Find(1);
var query = context.Entry(x).Collection(x => YCollection).Query();
我想这可以用扩展方法包装起来,就像这样使用:
x.YCollection.AsQueryable(context);
您可以为此使用LINQ扩展方法:
using System.Linq;
//....
x.YCollection.AsQueryable();
但是随后它将作为LINQ to Objects而不是LINQ to Entities执行。 因此,如果您只需要一个IQueryable对象而不是因为性能问题而需要它,则可以使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.