如何在分组后订购?

时间:2014-02-11 14:23:27

标签: linq linqpad

我正在使用linqpad,当我分组时,它为我正在分组的每个键显示表格做了很棒的工作。但我无法对呈现的表格进行排序。

这就是我所拥有的:

tblAgentActivities
.Where (aa => aa.StartDate >= DateTime.Today)
.OrderBy (aa => aa.AgentActivityID)
.GroupBy (aa => aa.tblUser.FullName)
.OrderBy (aa => aa.Key)

我希望按键排序(这是有效的),然后我希望按AgentActivityID对分组表进行排序(不起作用)

2 个答案:

答案 0 :(得分:2)

如果您的查询是LINQ-to-Objects查询,它将按原样正常工作,因此我认为您通过LINQ-to-SQL或Entity Framework查询数据库。

在这种情况下,解决方案是将.AsEnumerable()插入到查询中,以便在客户端进行分组和后续排序:

tblAgentActivities
  .Where (aa => aa.StartDate >= DateTime.Today)
  .OrderBy (aa => aa.AgentActivityID)
  .AsEnumerable()
  .GroupBy (aa => aa.tblUser.FullName)
  .OrderBy (aa => aa.Key)

鉴于您正在将所有分组数据提取到客户端,因此在客户端而不是服务器上进行分组没有性能损失;事实上,您可以通过减轻数据库服务器的负担来提高可扩展性。

答案 1 :(得分:1)

怎么样:

tblAgentActivities
            .Where (aa => aa.StartDate >= DateTime.Today)
            .GroupBy (aa => aa.tblUser.FullName)
            .Select(aa => new {

                FullName = aa.Key,
                List = aa.OrderBy(u => u.AgentActivityID).AsEnumerable()
            })
            .OrderBy (aa => aa.FullName)
            .ToList();