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 への参照を渡すだけの方がよいでしょうか?

    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 に答える