我有这个linq到实体查询:
c.CreateQuery<T_Hotels>("T_Hotels").Where(item => item.Id > 0).GroupBy(item => new { item.Location, item.Name }).Select(group => new { group.Key, Total = group.Sum(item => item.Id) })
我想在类Helper的方法中实现所有内容,如何声明GroupBy和Select的表达式,返回类型是什么?
public IQueryable<???> GetHotelsGroupBy(Expression<Func<T_Hotels, bool>> pWhere,
??? pGroupBy, ??? pSelect)
{
return c.CreateQuery<T_Hotels>("T_Hotels").Where(pWhere).GroupBy(pGroupBy).Select(pSelect);
}
抱歉我的英语。 ノ
答案 0 :(得分:1)
理想情况下,匿名类型不应在使用它们的类型之外公开,除非您乐意使用反射与它们交谈。但是,您可以返回非通用IEnumerable
或IList
。
是一种名为“cast by example”的东西,它可以使anon-types恢复到您的期望,但是非常脆弱。声明一个自定义类型来表示此API上的数据会更好(而且工作量更少)。那么你不是每一步都在与系统作斗争。
答案 1 :(得分:1)
public IQueryable<TResult> GetHotelsGroupBy<TKey, TResult>(
Expression<Func<T_Hotels, bool>> pWhere,
Expression<Func<T_Hotels, TKey>> pGroupBy,
Expression<Func<IGrouping<TKey, T_Hotels>, TResult>> pSelect
)
{
return c.CreateQuery<T_Hotels>("T_Hotels")
.Where(pWhere)
.GroupBy(pGroupBy)
.Select(pSelect);
}