c# - Linq OrderBy 不对原始集合进行排序吗?

标签 c# winforms linq linq-to-sql

我第一次使用 Linq To Sql 作为我的数据库层,我遇到了一个问题。基本上,我有一个允许用户创建预定义作业的表单。预定义的作业可以有许多预定义的作业项。例如,预定义的工作可能类似于换油。预定义的工作项目将是石油、劳动力等。在我的数据库中,PredefinedJobs 是一个表,PredefinedJobItems 是另一个带有返回到 PredefinedJobs 的外键的表。我有一个用于添加预定义作业的表单,该表单具有支持该表单作为类变量的 Linq-to-Sql 类。窗体上有一个 ListView,显示所有作业项目。一项新功能要求我跟踪项目在 ListView 中的位置。例如,如果我的项目 ListView 如下所示,请注意顺序:

Qty          Name          Desc          ItemOrder
4            Oil           Penzoil       0
1            Labor                       1

因为项目是通过子窗体添加的,所以我不想提供对 ListView 的访问。因此,我创建了下面的方法,试图在 PredefinedJob Linq to Sql 对象上创建 ItemOrder 和对集合进行排序。 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 创建一个新查询,该查询在执行时不会改变您的原始列表。

为什么不只是 Sort List?

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

关于c# - Linq OrderBy 不对原始集合进行排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217175/

相关文章:

c# - 对象不可序列化

c# - Microsoft.Extensions.Logging自定义实现,如何获取调用方方法名?

c# - GDI+ 就像在 WPF 中绘图一样

c# - MVC DropDownListFor 值不能为空

c# - WPF 组合框所选项目

c# - 什么时候可以在 Dispose 中调用 Finalize?

c# - 如何使后台线程暂停然后继续单击按钮?

c# - 窗体最大化时的中心控件

c# - check exists before add to list 和 linq 中的 distinct 之间的性能

c# - Linq 和排序依据