сортировка по ORDERи изменения мест по ORDER в БД

195
26 марта 2017, 01:38

привет всем! работаю над мини CMSс объектами у которых есть параметер ORDER(int). допустим у меня есть 10 объектов и у каждого свой ORDER от 1 - 10.

я хочу подвинуть 3 елемент на 8 позицию следовательно 3 елемент должен получить позицию(order) 8 а 8 елемент толжен стать 7 а 7-6 а 6-5 и так до 1.....

и наоборот: если я сдвину 8 елемент на 2 позицию то 8 елемент получает ордер 2 2 получает 3, 3 получает 4 и так до query.Coun

я написал кривоватый код который при нагрузке глючит и выдаёт совсем не тот результат как хотелось бы. может кто сталкивался с такой проблемои просветите..

вот мой код:

 public static void UpdateJsTreeOrder(this IDocumentSession session, string pageId, string parent, string element)
    {
        var pages = session.Query<Page>().Where(x => x.ParentPageId == parent);
        var orderList = pages.Select(x => x.Order).Take(1024).ToList();
        var page = session.Load<Page>(pageId);
        if (element == null)
        {
            var subList = pages.Where(x => x.Order != page.Order).Take(1024).ToList();
            foreach (var item in subList)
            {
                item.Order++;
                session.Store(item);
            }
            page.Order = 1;
            session.Store(page);
            return;
        }

        var newOrder = session.Load<Page>(element).Order;

        if (!orderList.Any())
        {
            //its the first item
        }
        //last item 
        if (newOrder == orderList.Max())
        {
            var subList = pages.Where(x => x.Order <= newOrder && x.Order != page.Order).Take(1024).ToList();
            foreach (var item in subList)
            {
                item.Order--;
                session.Store(item);
            }
        }
        //first item
        else if (newOrder == orderList.Min())
        {
            var subList = pages;
            foreach (var item in subList)
            {
                item.Order--;
                session.Store(item);
            }
        }
        //int the middle
        else
        {
            var subList = pages.Where(x => x.Order >= newOrder || x.Order == newOrder).Take(1024).ToList();
            foreach (var item in subList)
            {
                item.Order--;
                session.Store(item);
            }
        }
        page.Order = newOrder;
        session.Store(page);
    }
READ ALSO
Кодировка в c Sharp

Кодировка в c Sharp

Не знаю как правильно обозвать данный вопрос) Не пинайте) Задача стоит получить коды смайлов vkНо c# упорно съедает сами коды, превращая их в квардраты

228
c# Обработка нажатие клавиш

c# Обработка нажатие клавиш

Стоит задача на с#Имеется чекбокс , при выбраном чекбоксе

298
Преобразование UTF-8 байтов в код Unicode

Преобразование UTF-8 байтов в код Unicode

Как преобразовать 4 байта UTF-8 в код Unicode?

250
Не работает запись в файл txt

Не работает запись в файл txt

Учусь по книге разработке на phpТам есть такой код

275