Linq OrderBy不会返回预期结果

时间:2012-04-16 06:57:43

标签: c# 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);

但是我仍然可以通过创建日期得到最终结果。

知道我做错了吗?

3 个答案:

答案 0 :(得分: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()
            })

答案 1 :(得分:1)

我认为你应该改变select和OrderBy的顺序。 记住它是一系列函数,下一个函数总是对链中前一个函数的结果进行操作。 当您拥有订单时,您将订购Select的结果。 在select中你正在构造新的ChannelRowUi对象,这些对象可能都得到了相同的CreationDate,但由于你没有显示ChannelRowUi构造函数,所以无法肯定地说。

答案 2 :(得分:0)

我认为你不会调用ToList命令

另外,请尽量避免使用ToList。

如果您有大数据 - 使用ToList是错误的。

你应该使用Deferred Ecxecution

首先你要完成orderby然后选择。