2012-04-16 38 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