Перемещение записей вверх и вниз с помощью Linq to SQL - PullRequest
1 голос
/ 29 июня 2009

Мне нужно реализовать функцию для перемещения записей вверх и вниз (сортировка) и сохранения сортировщика с Linq для SQL . Я использую SQL Server 2000, но, возможно, я смогу выполнить обновление, если для этого есть решение с более новой версией SQL Server. Я хотел бы услышать любые ваши мысли о том, как это сделать.

Ответы [ 2 ]

3 голосов
/ 29 июня 2009

Просто добавьте в таблицу целочисленный столбец 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();
    }
}

Сделайте обратное для движения вниз, и все готово. Если вам это нужно для нескольких таблиц, просто создайте общую версию, используя интерфейс.

0 голосов
/ 30 июня 2009

Спасибо, Даниэль! Посмотрев на ваш пример, я придумал это для сортировки товаров по категории.

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();
}

Я использовал ОбновленоExtension с Подключено к LINQ для фактического обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...