2014-06-27 21 views
0

我堅持過去幾天沒有太多進展的這一要求。帶有IQueryable實體的DbContext編寫自定義查詢

我們的數據庫層是通過DbContext與存儲庫,工作單元模式處理的。 它在poko類上生成查詢。

public virtual IQueryable<ENT> All(params Expression<Func<ENT, object>>[] includes) 
    { 
     IQueryable<ENT> query = Set; 

     query = AddIncludesToQry(query, includes); 

     return query; 
    } 

protected DbSet<ENT> Set 
    { 
     get { return Ctxt.Set<ENT>(); } 
    } 

protected virtual IQueryable<ENT> AddIncludesToQry(IQueryable<ENT> query, params Expression<Func<ENT, object>>[] includes) 
    { 
     Expression<Func<ENT, object>>[] includesToUse = d2l.NullOrEmpty(includes) 
      ? DefaultIncludes 
      : includes; 

     if (d2l.NullOrEmpty(includesToUse)) return query; 

     foreach (var incl in includesToUse) 
     { 
      query = query.Include(incl); 
     } 

     return query; 
    } 

ENT =波科模型類

AddIncludesToQry =添加where子句中的條件。

這將通過過濾where條件來返回整個表數據(在數據庫中將有一個帶有poko類名的表)。

但是,我希望得到的數據有時幾乎不同。 例如,我想要限制選擇列表以返回deptName,Count(僱員) 這隻需要選擇列表中的兩列,並按deptName分組。

我不知道如何使用這種模式,仍然可以IQueryable查詢來實現這一點。

有人可以提出任何想法嗎?

回答

1

分組操作之後,您正在處理的數據模式發生更改(與純SQL中的完全相同)。所以你肯定可以繼續引用你的查詢爲IQueryable,但不是IQueryable<ENT>(因爲我懷疑你願意)。

在這種情況下IQueryable的它足夠:

newQry = qry 
    .GroupBy(x => x.deptName) 
    .Select(y => new { deptName = y.Key, count = y.Count() }); 
相關問題