移动记录向上和向下的LINQ to SQL(Moving records up and down w

2019-09-17 04:36发布

我需要实现了移动记录和向下 (排序),并使用LINQ保存排序顺序到SQL的功能。 我使用SQL Server 2000,但如果它与SQL Server的更新版本的解决方案,我也许能够升级。 我很想听听你对如何做到这一点,你可能有什么想法。

Answer 1:

只是一个整数列添加Index表和修改基于所述用户输入该指数-向上移动只是递减所选择的记录的索引值和递增前述记录的索引值。

public void MoveUp(Guid id)
{
    Item item = Context.Items.Single(i => i.Id == id);

    if (item.Index > 0)
    {
        Item predecessor = Context.Items.Single(i => i.Index == item.Index - 1);

        item.Index -= 1;
        predecessor.Index += 1;

        Context.SaveChanges();
    }
}

做相反的向下移动,和你做。 如果你需要这个多个表,只需创建使用接口的通用版本。



Answer 2:

感谢丹尼尔! 通过观察你的榜样,我想出了这个排序类别中的产品。

public void MoveUp(int categoryId, int productId, int originalIndex, int newIndex)
{
    if (newIndex == originalIndex) return;

    var product = _context.CategoryProducts.Single(x => x.CategoryId == categoryId && x.ProductId == productId);
    product.SortOrder = newIndex;

    _context.CategoryProducts
        .Where(x =>
               x.CategoryId == categoryId &&
               x.ProductId != productId &&
               x.SortOrder >= newIndex &&
               x.SortOrder <= originalIndex)
        .Update(x => { x.SortOrder = x.SortOrder + 1; });

    _context.SubmitChanges();
}

public void MoveDown(int categoryId, int productId, int originalIndex, int newIndex)
{
    if (newIndex == originalIndex) return;

    var product = _context.CategoryProducts.Single(x => x.CategoryId == categoryId && x.ProductId == productId);
    product.SortOrder = newIndex;

    _context.CategoryProducts
        .Where(x =>
               x.CategoryId == categoryId &&
               x.ProductId != productId &&
               x.SortOrder >= originalIndex &&
               x.SortOrder <= newIndex)
        .Update(x => { x.SortOrder = x.SortOrder - 1; });

    _context.SubmitChanges();
}

我用UpdatedExtension从迷上了LINQ的实际更新。



文章来源: Moving records up and down with Linq to SQL