2017-06-25 48 views
0

我正在使用通用存儲庫從數據庫中檢索對象,而惰性加載在EntityFramework Core中不可用,有時候我需要選擇相關的對象。如何構建Linq表達式來選擇嵌套對象?

回購的代碼如下所示:

public T GetSingle(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties) 
    { 
     IQueryable<T> query = _context.Set<T>(); 
     foreach (var includeProperty in includeProperties) 
     { 
      query = query.Include(includeProperty); 
     } 

     return query.Where(predicate).FirstOrDefault(); 
    } 

,並告訴它來選擇相關的對象很簡單:

.GetSingle(id,x=>x.ObjectviaFK)` 

我不能換我的頭周圍建設,使一個表達式選擇嵌套對象(類似於上下文中的.Include(...).ThenInclude(...)),如.GetSingle(id, x=>Parent,parent=>Grand,grand=>GrandGrand)。我該怎麼做呢?

+1

通常我使用linq查詢調用的非linq遞歸輔助方法。 – jdweng

回答

1

看起來如果你不想改變你的GetSingle你可以放入正確的lambda表達式來包含嵌套的對象?

`.GetSingle(id, x=>x.Parent, x=>x.Parent.Grand, x=>x.Parent.GrandGrand) 
+1

不幸的是,這對於如何處理'.Include(...)。ThenInclude(...)'這個問題並不公平,這比動態地向查詢添加'Include's要困難得多。 –