2012-04-16 87 views
0

這可能是一個很小的小姐關注的問題:LINQ的排序依據不返回預期的結果

myColl.OrderByDescending(item => item.myCollItemCreationDate) 
.GroupBy(item => new { item.Id, item.ItemType, item.ChannelName }) 
      .Select(res => new ChannelRowUi(res.ToList()) 
        { 
         ChannelName = res.Key.ChannelName, 
         ItemType = res.Key.ItemType.ToString() 
        }); 

但後來我明白我錯了,作爲分組混亂秩序。

我改成:

myColl.GroupBy(item => new { item.Id, item.ItemType, item.ChannelName }) 
     .Select(res => new ChannelRowUi(res.ToList()) 
       { 
        ChannelName = res.Key.ChannelName, 
        ItemType = res.Key.ItemType.ToString() 
       }) 
       .OrderByDescending(item => item.myCollItemCreationDate); 

但我仍然得到通過創建時間排序,則最終結果。

任何想法我做錯了什麼?

+1

這真的看起來像1)它不應該編譯(這是另一個問題)或2)'ChannelRowUi'的'CreationDate'沒有設置(這將解釋OrderByDescending「不工作」...) – 2012-04-16 07:07:13

回答

1

我認爲你應該改變select和OrderBy的順序。 記住它是一個函數鏈,下一個函數總是對鏈中前一個函數的結果進行操作。 當您訂購了最後一份訂單時,您將訂購選擇的結果。 在選擇你正在構建新的ChannelRowUi對象可能都獲得相同的CreationDate,不能肯定地說,因爲你沒有顯示ChannelRowUi構造函數。

0

我不認爲你mus調用ToList命令

另外,請儘量避免ToList。

如果您有大數據 - 使用ToList是錯誤的。

你應該使用遞延Ecxecution

首先你要做的排序依據,然後選擇。

+0

我didn 't use ToList – 2012-04-16 07:10:19

+0

@EladBenda對不起,我的意思是baz1nga – 2012-04-16 07:11:41

2
myColl 
    .GroupBy(item => new { item.Id, item.ItemType, item.ChannelName }) 
    .OrderByDescending(item => item.CreationDate) 
    .ToList() 
    .Select(res => 

      new ChannelRowUi(res.ToList()) 
      { 
       ChannelName = res.Key.ChannelName, 

       ItemType = res.Key.ItemType.ToString() 
      }) 
+0

你能否爲我描述你的答案,請 – Likurg 2012-04-16 07:02:40

+0

在這種情況下,你在數據庫中命令結果並在內存中檢索它,然後創建一個DTO。 – Baz1nga 2012-04-16 07:03:45

+0

我不認爲你mus調用ToList命令。 – 2012-04-16 07:04:21