0

这可能是一个微小的未注意问题:

  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);

但我仍然得到未按创建日期排序的最终结果。

知道我做错了什么吗?

4

3 回答 3

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()
            })
于 2012-04-16T07:01:38.630 回答
1

我认为您应该更改 select 和 OrderBy 的顺序。记住它是一个函数链,下一个函数总是对链中前一个函数的结果进行操作。当您最后有 orderBy 时,您正在订购 Select 的结果。在选择中,您正在构建新的 ChannelRowUi 对象,这些对象可能都获得相同的 CreationDate,不能肯定地说,因为您没有显示 ChannelRowUi 构造函数。

于 2012-04-16T07:11:51.280 回答
0

我不认为你必须调用 ToList 命令

另外,请尽量避免 ToList。

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

你应该使用延迟执行

首先你必须做 orderby 然后选择。

于 2012-04-16T07:01:00.120 回答