2

私は以下のようなオブジェクトリストを持っています:

ID   Name       PageOrder
1    Home       1
2    Product    2
3    Link       3
4    Help       4

希望:

ID    Name      PageOrder
1     Home      1
3     Link      2
2     Product   3
4     Help      4

以下のようにC#でコーディングしています。しかし、私がやっている方法がベストプラクティスではないとは思いません。ご意見をお聞かせください。

public void OrderUp(int favouriteId)
    {
        UsFavourite currentFav = db.UsFavourites.FirstOrDefault(m => m.FavouriteID == favouriteId);

        // Get favourite by current favourite's order - 1
        UsFavourite tempFav = db.UsFavourites.FirstOrDefault(m => m.FavouriteOrder == (currentFav.FavouriteOrder - 1));

        if (tempFav != null)
        {
            //update tempFav
            tempFav.FavouriteOrder = currentFav.FavouriteOrder;
            Save();

            //update currentFav
            currentFav.FavouriteOrder = currentFav.FavouriteOrder - 1;
            Save();
        }

    }

    public void OrderDown(int favouriteId)
    {
        UsFavourite currentFav = db.UsFavourites.FirstOrDefault(m => m.FavouriteID == favouriteId);

        // Get favourite by current favourite's order + 1
        UsFavourite tempFav = db.UsFavourites.FirstOrDefault(m => m.FavouriteOrder == (currentFav.FavouriteOrder + 1));

        if (tempFav != null)
        {
            //update tempFav
            tempFav.FavouriteOrder = currentFav.FavouriteOrder;
            Save();

            //update currentFav
            currentFav.FavouriteOrder = currentFav.FavouriteOrder + 1;
            Save();
        }

    }
4

1 に答える 1

3

コードは正常に見えます。Paulが言ったように、saveを2回使用するべきではありません。私はまた、次のようにいくつかの重複を削除したいと思うでしょう

    public void OrderUp(int favouriteId)
    {
        ChangeOrder(false, favouriteId);

    }

    public void OrderDown(int favouriteId)
    {
        ChangeOrder(true, favouriteId);
    }
    private void ChangeOrder(bool OrderDown, int favouriteId)
    {           
        UsFavourite currentFav = db.UsFavourites.FirstOrDefault(m => m.FavouriteID == favouriteId);

        // Get favourite by current favourite's order + 1
        UsFavourite tempFav;
        if (OrderDown)
        {
            tempFav = db.UsFavourites.OrderBy(m => m.FavouriteOrder).FirstOrDefault(m => m.FavouriteOrder > (currentFav.FavouriteOrder));
        }
        else
        {
            tempFav = db.UsFavourites.OrderByDescending(m => m.FavouriteOrder).FirstOrDefault(m => m.FavouriteOrder < (currentFav.FavouriteOrder));

        }
        if (tempFav != null)
        {
            //update tempFav
            tempFav.FavouriteOrder = currentFav.FavouriteOrder;

            //update currentFav
            currentFav.FavouriteOrder = currentFav.FavouriteOrder + change;
            Save();
        }
    }
于 2012-08-15T16:21:26.817 に答える