1

オブジェクトのリストがあり、各オブジェクトはデータベースからのレコードを表します。レコードを並べ替えるには、SortOrderというプロパティがあります。サンプルオブジェクトは次のとおりです。

public class GroupInfo
{
    public int Id { get; set; }
    public string Text { get; set; }
    public int SortOrder { get; set; }

        public GroupInfo()
        {
            Id = 0;
            Text = string.Empty;
            SortOrder = 1;
        }
}

リストオブジェクトは次のようになります。

var list = new List<GroupInfo>();

リスト内の他のオブジェクトのSortOrderを変更し、SortOrderを更新できるようにする必要があります。1つずつ並べ替える方法を見つけました。複数変更する方法と、他のレコードのSortOrderを調整する方法を知る必要があります。何か案は?

4

2 に答える 2

1

これは、最初に元SortOrderのと更新されたを取得することによって行うことができますSortOrder。次に、コレクションを繰り返し処理し、との間の範囲内にあるSortOrder他のオブジェクトを調整します。これらすべてを、含まれているコレクションを取り込む「SetSortOrder」関数に入れることができます。GroupInfooriginalupdated

public static void SetSortOrder(List<GroupInfo> groupInfos, GroupInfo target, int newSortOrder)
{
    if (newSortOrder == target.SortOrder)
    {
        return; // No change
    }
    // If newSortOrder > SortOrder, shift all GroupInfos in that range down
    // Otherwise, shift them up
    int sortOrderAdjustment = (newSortOrder > target.SortOrder ? -1 : 1);
    // Get the range of SortOrders that must be updated
    int bottom = Math.Min(newSortOrder, target.SortOrder);
    int top = Math.Max(newSortOrder, target.SortOrder);
    // Get the GroupInfos that fall within our range
    var groupInfosToUpdate = from g in groupInfos
                                where g.Id != target.Id
                                && g.SortOrder >= bottom
                                && g.SortOrder <= top
                                select g;
    // Do the updates
    foreach (GroupInfo g in groupInfosToUpdate)
    {
        g.SortOrder += sortOrderAdjustment;
    }

    target.SortOrder = newSortOrder;
    // Uncomment this if you want the list to resort every time you update
    // one of its members (not a good idea if you're doing bulk changes)
    //groupInfos.Sort((info1, info2) => info1.SortOrder.CompareTo(info2.SortOrder));
}

更新:提案されたように、ロジックを静的ヘルパー関数に移動しました。

于 2012-06-27T18:51:42.290 に答える
0
var sortedList = list.OrderBy(item => item.SortOrder);

編集:申し訳ありませんが、私は誤解しました。GroupInfoそのプロパティの更新を処理するには、 外部のメソッドを自分で作成する必要があります。

于 2012-06-27T18:34:17.563 に答える