2010-07-27 54 views
4

我有這樣的LINQ to Entities查詢:如何從匿名類型列表中迭代?

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) }) 

我想要實現的一類輔助的方法的一切,如何申報的GroupBy和選擇的表達,有什麼返回類型?

public IQueryable<???> GetHotelsGroupBy(Expression<Func<T_Hotels, bool>> pWhere, 
     ??? pGroupBy, ??? pSelect) 
{ 
    return c.CreateQuery<T_Hotels>("T_Hotels").Where(pWhere).GroupBy(pGroupBy).Select(pSelect); 

} 

對不起,我的英文。 Rino

回答

1

匿名類型理想情況下應該不會暴露在使用它們的類型之外,除非您樂意使用反射與它們交談。但是,您可以返回非通用IEnumerableIList

一種叫「cast by example」,可以工作得到匿名類型回到你所期望的,但是這是非常。聲明一個自定義類型來表示通過此API的數據會更好(也更少工作)。那麼你並沒有在每一步都與系統作鬥爭。

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); 
}