6

我第一次使用 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 to 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();
    }
4

2 回答 2

11

OrderBy创建一个新查询,该查询在执行时不会更改您的原始列表。

为什么不只是 的Sort方法List

items.Sort((a, b) => a.ItemOrder.CompareTo(b.ItemOrder));
于 2012-08-31T14:33:42.880 回答
0

我想你在找List<>.Sort

class Cmp : IComparer<PredefinedJobsItem>
{
    public int Compare(PredefinedJobsItem x, PredefinedJobsItem y)
    {
        return x.ItemOrder.CompareTo(y.ItemOrder);
    }
}


var comparison = new Cmp();
items.Sort(comparison);
于 2012-08-31T14:33:26.463 回答