加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq OrderBy不排序原始集合吗?

发布时间:2020-12-15 08:36:29 所属栏目:百科 来源:网络整理
导读:我第一次使用 Linq To Sql作为我的数据库层,我遇到了一个问题.基本上,我有一个允许用户创建预定义作业的表单.预定义作业可以具有许多预定义作业项.例如,预定义的工作可能类似于换油.预定义的作业项目将是石油,人工等.在我的数据库中,PredefinedJobs是一个表,
我第一次使用 Linq To Sql作为我的数据库层,我遇到了一个问题.基本上,我有一个允许用户创建预定义作业的表单.预定义作业可以具有许多预定义作业项.例如,预定义的工作可能类似于换油.预定义的作业项目将是石油,人工等.在我的数据库中,PredefinedJobs是一个表,PredefinedJobItems是另一个表,其外键返回PredefinedJobs.我有一个表单用于添加预定义的作业,其中Linq-to-Sql类将表单作为类变量支持.表单上有一个ListView,显示所有作业项.一项新功能要求我跟踪ListView中项目的位置.例如,如果我的项目ListView如下所示,请记下订单:
Qty          Name          Desc          ItemOrder
4            Oil           Penzoil       0
1            Labor                       1

因为项目是通过子表单添加的,所以我不想提供对ListView的访问.因此,我创建了下面的方法,试图创建ItemOrder并将PredefinedJob Linq上的集合排序为Sql对象.似乎List上的OrderBy函数实际上并未对PredefinedJob上的集合进行排序.什么是维护Linq to Sql集合(即PredefinedJob.fkJobItems)的最佳方法?或者,将ListView的引用传递给子表单会更好吗,该子表单将项目添加到我可以访问selectedIndex的作业中?

private SortAndOrderItems(List<PredefinedJobsItem> items)
    {
        var nextItemOrderNumber = items.Max(max => max.ItemOrder) + 1;
        foreach (var item in items)
        {
            if (item.ItemOrder == null)
            {
                item.ItemOrder = nextItemOrderNumber;
                nextItemOrderNumber++;
            }
        }
        items.OrderBy(i => i.ItemOrder).ToList();
    }

解决方法

OrderBy创建一个新查询,在执行时,不会改变原始列表.

为什么不只是List的Sort方法?

items.Sort((a,b) => a.ItemOrder.CompareTo(b.ItemOrder));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读