2014-06-27 22 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() }); 
相关问题