首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq OrderBy未返回预期结果

Linq OrderBy未返回预期结果
EN

Stack Overflow用户
提问于 2012-04-16 14:57:43
回答 3查看 164关注 0票数 0

这可能是一个很小的忽略注意的问题:

代码语言:javascript
复制
  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() 
                  });

但后来我意识到我错了,因为分组打乱了顺序。

我更改为:

代码语言:javascript
复制
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);

但是我仍然得到了最终的结果,没有按创建日期排序。

知道我做错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-16 15:11:51

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-16 15:01:39

代码语言:javascript
复制
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()
            })
票数 2
EN

Stack Overflow用户

发布于 2012-04-16 15:01:00

我不认为你应该调用ToList命令

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

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

您应该使用延迟执行

首先,您需要执行orderby,然后选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10169846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档