我有一段代碼,我想從港口到EF6 EF核心(在ASP.NET 1.0的核心項目RTM)。它可以過濾患者表在2015年(我用這個在我EF6項目通過添加Where子句的創建動態篩選所有患者用「Verpleegperiode」開始日期和結束日期以「Verpleegperiode」之間例如日期時間IQueryable的對象,要過濾的姓名,出生日期,以及這些類型的過濾器)EF核心1.0.0鏈接Where子句
代碼:
var datetime = DateTime.Parse("5/7/2015");
var patients = _context.Patienten.Include(p => p.Dossiers).ThenInclude(d => d.DossierContact).ThenInclude(dc => dc.Verpleegperiodes)
.Where(p =>
p.Dossiers.Any(d =>
d.DossierContact.Verpleegperiodes.Any(vp =>
(!vp.BeginDatumUur.HasValue || vp.BeginDatumUur.Value <= datetime) &&
(!vp.BeginDatumUur.HasValue || vp.EindDatumUur >= datetime))
))
.Where(p =>
p.Dossiers.Any(d => d.DossierContact == null ||
d.DossierContact.Verpleegperiodes.Any(vp =>
!vp.BeginDatumUur.HasValue || vp.BeginDatumUur.Value.Year.ToString() == "2015")
)).ToList();
這將導致一個查詢中呼籲各「Verpleegperiode」中的每個「檔案」的「DossierContact」 。由於每個表中有超過50000條記錄,因此這種情況會持續進行,並且永遠不會完成查詢(可能需要幾個小時...)
在EF6中,這會生成一個查詢,其中包含Where子句以及使用連接和子查詢由EF6創建並開展工作。
我不確定這是EF核心中沒有完成的東西,還是這是我的代碼中的錯誤,這就是爲什麼我在提出EF核心Github項目錯誤之前就問這個問題。
在EF中定義的關係:病人一對多檔案,檔案一對一DossierContact,檔案接觸一對多Verpleegperiode。
我提起它在Github上的錯誤:https://github.com/aspnet/EntityFramework/issues/6448 – AppSum
@AppSum獲得最新版本,並建立它。重試重現該錯誤。如果問題確實解決了,那麼添加你的筆記並檢查這個答案。 –