[英]PredicateBuilder and n+1 query
我使用PredicateBuilder
將動態表達式傳遞給我的存儲庫中的一個方法,該方法在Where
子句中使用它。 這是相關的存儲庫代碼:
var results = context.Set<T>().AsExpandable.Where(where);
foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
results = results.Include(includeProperty);
}
return results.ToList();
在我的控制器中我有這個:
var predicate = PredicateBuilder.True<Account>();
if (amount> 0)
predicate = predicate.And(d => d.Amount <= amount);
var model = AccountRepository.Get(predicate, "Owner").ToList();
return PartialView(model);
當我對“Owner”的屬性進行引用時,它會再次向數據庫進行往返,從而導致n + 1查詢問題。 是否有任何解決方法可以避免這種情況?
在AsExpandable 之前執行包含,如下所示:
var results = context.Set<T>()
foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
results = results.Include(includeProperty);
}
return results.AsExpandable.Where(where).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.