簡體   English   中英

從EF代理對象返回IQueryable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM