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

代码看起来不错。正如保罗所说,您不应该使用 save 两次。我也很想用以下内容删除一些重复

    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 回答