Обновление порядка сортировки LINQ до ближайшего возможного значения - PullRequest
0 голосов
/ 20 июня 2011

У меня есть таблица с элементами, которые отображаются по их SortOrder.Сортировки SortOrders не очень хорошо увеличиваются, значения пропускаются от 1 до 100.То, что я хочу сделать, это переключить значения SortOrder двух элементов, которые находятся ближе всего друг к другу, не обязательно зная , насколько близко друг к другу они находятся.Например:

ItemX.SortOrder = 5;
ItemY.SortOrder = 26;

Предположим, что ни у одного элемента нет порядка сортировки между 5-26.

Мой код должен изменить это на:

ItemX.SortOrder = 26;
ItemY.SortOrder = 5;

По какой-то причинемой код переключает SortOrders со случайными элементами, например:

ItemX.SortOrder = 5;
ItemY.SortOrder = 26;
ItemZ.SortOrder = 34;

Становится:

ItemX.SortOrder = 34;
ItemY.SortOrder = 26;
ItemZ.SortOrder = 5;

Я думаю, это потому, что результаты моего запроса не упорядочены так, как япредставляя их.Вот мой код запроса.Если что-то еще нужно, просто дайте мне знать.

itemToSwitch = DataSource.Items.Where(item => item.SortOrder > currentItem.SortOrder).First();
int? next = itemToSwitch.SortOrder;
int? previous = currentItem.SortOrder;
currentItem.SortOrder = next;
itemToSwitch.SortOrder = previous;

Извините, если мой вопрос трудно прочитать или перемешать.Я пытаюсь быть максимально ясным.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Я подозреваю, что вы действительно хотите:

 var sorted = DataSource.Items.OrderBy(item => item.SortOrder);

Если вы используете его повторно, .ToList() может помочь

0 голосов
/ 20 июня 2011

Почему не использовать:

var greatesItem = DataSource.Items.OrderBy(item => item.SortOrder).Fisrt();
var smallestItem = DataSource.Items.OrderBy(item => item.SortOrder).Last();

var tempOrder = greatesItem.SortOrder;
greatesItem.SortOrder = smallestItem.SortOrder;
smallestItem.SortOrder = tempOrder;

Затем вы отправляете изменение в базу данных.(Я предлагаю вам сделать функцию с этим).

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