我正在使用具有物體框架的存盤庫模式,如本文所述:具有物體框架的存盤庫模式 在描述 GenericRepository 的部分(通用存盤庫)中有一個方法用于從名為 Get 的資料庫集中獲取物體。它有一個 orderBy 但沒有 groupBy。我想知道如何以與 orderBy 相同的方式實作 groupBy ,以便您可以指定在物體上動態分組的欄位。
我想出的是:
Func<IQueryable<TEntity>, IGrouping<string, TEntity>> groupBy = null
然后在方法代碼中應該使用如下內容:
if(groupBy != null)
{
query = groupBy(query).ToList();
}
但這不是編譯,因為 IGrouping 不可查詢。有人知道如何為我指明正確的方向或有解決方案嗎?
編輯:這樣做而不是在回傳串列上使用 groupby 的原因是出于性能原因。我希望將 groupby 作為 sql 陳述句發送到資料庫并在那里解決。
uj5u.com熱心網友回復:
沒有投影,分組就沒有意義。所以你必須定義回傳IEnumerable新型別的新方法。
我已經添加了這種方法的示例。也被洗掉includeProperties,因為 EF Core 在分組期間忽略包含。
使用示例:
_orderRepostory
.GetGrouped(e => e.UserId, g => new { UserId = g.Key, Count = g.Count()});
和實施:
public class GenericRepository<TEntity> where TEntity : class
{
... // other code
public virtual IEnumerable<TResult> GetGrouped<TKey, TResult>(
Expression<Func<TEntity, TKey>> groupingKey,
Expression<Func<IGrouping<TKey, TEntity>, TResult>> resultSelector,
Expression<Func<TEntity, bool>>? filter = null)
{
var query = dbSet.AsQueryable();
if (filter != null)
{
query = query.Where(filter);
}
return query.GroupBy(groupingKey).Select(resultSelector);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511724.html
上一篇:Scala-物件和類
