过去几天我一直坚持这个要求而没有太大进展。
我们的数据库层通过带有存储库,工作单元模式的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 = poko模型类
AddIncludesToQry =在where子句中添加条件。
这将通过过滤where条件来返回整个表数据(数据库中将有一个包含poko类名的表)。
但是,我希望数据有时会有所不同。 对于ex,我想限制选择列表以返回deptName,Count(employee) 这只需要选择列表中的两列,并按deptName分组。
我不知道如何使用仍然可以IQueryable查询的模式来实现这一点。
有人可以提出任何想法吗?
答案 0 :(得分:1)
分组操作后,您正在处理的数据模式发生了变化(与纯SQL一样)。因此,您肯定可以继续将您的查询引用为IQueryable
,而不是IQueryable<ENT>
(我怀疑您想要)。
在IQueryable的情况下就足够了:
newQry = qry
.GroupBy(x => x.deptName)
.Select(y => new { deptName = y.Key, count = y.Count() });