2014-02-11 22 views
1

我正在使用linqpad,當我將它分組時,它爲顯示我分組的每個鍵的表格做了非常棒的工作。但是我無法對提交的表格進行排序。如何在分組後排序?

以下是我有:

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

我想組由鍵進行排序(這是工作的),那麼我想分組表由AgentActivityID(沒有工作)進行排序

回答

2

如果您的查詢是LINQ到對象的查詢,它會正常工作的,是的,所以我認爲你要查詢通過LINQ-TO-數據庫SQL或實體框架。

在這種情況下,解決辦法是插入.AsEnumerable()進入查詢,以便分組和排序以後發生在客戶端:

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

假設你所有的分組數據的獲取到客戶端,在客戶端而不是服務器上進行分組並不會影響性能;實際上,您可以通過減輕數據庫服務器的一些不必要的負擔來提高可伸縮性。

+0

優秀的答案,這正是我正在尋找的。加上很好的解釋,謝謝。 – Smeegs

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(); 
+0

是的,它返回所需的結果。可惜的是,linqpad在本地可視化分組數據方面做得很好,但在這之後你不能做太多事情。這一方面提供本地功能,但完全符合我需要的功能。 謝謝! – Smeegs