Список внутри списка, я хочу сделать нумерацию внутренних элементов списка в c # Linq или Lambda - PullRequest
0 голосов
/ 03 мая 2018

Я хочу сделать пейджинг в C #. но сценарий довольно сложный. Пожалуйста, смотрите ниже детали.

У меня есть основной список А. Внутри списка А есть еще один список Б. Теперь в списке В есть несколько списков С. Я хочу выполнить нумерацию страниц в списке C, используя C # Linq или Lambda.

  • Список А
    • Список Б [0]
      • Список C [с другой категорией (предполагаемая длина = 4)]
    • Список Б [1]
      • Список C [с другой категорией (предполагаемая длина = 10)]
    • Список Б [2]
      • Список C [с другой категорией (предполагаемая длина = 35)]


Длина списка B является динамической и также в каждом индексе списка B список C также будет динамической длиной.

Теперь я хочу выполнить пейджинг в Списке C, Все Количество 4 + 10 + 35 записей.
Как я могу это сделать?

Код:

List<MenuItemDetails> newMenuItemList = new List<MenuItemDetails>();

foreach (var menuli in output.GroupMenuCategories)
{
    foreach (var item2 in menuli.MenuItems)
    {
        newMenuItemList.Add(item2);
    }
}

var result = newMenuItemList.Skip((input.PageIndex - 1) * input.PageSizeSelected)
                            .Take(input.PageSizeSelected);

Я попытался поместить элементы списка C в новый список, а затем применил разбиение на страницы. Теперь, что мне делать дальше, чтобы поместить в основной список A.
Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Этот ответ использует MoreLinq и иллюстрирует использование «Пакет». Я понимаю, что этот вопрос не включал MoreLinq, но поскольку вопрос был общим, отметив "c # Linq или Lambda", я подумал, что это обеспечило привлекательное решение.

result = output.GroupMenuCategories
.SelectMany(MenuItems => MenuItems.SelectMany(x => x))
.Batch(PageSizeSelected).Skip(PageIndex - 1).Take(1).First();
0 голосов
/ 03 мая 2018

Вы можете выровнять структуру, используя SelectMany. Таким образом, вы получаете структуру, на которой намного проще выполнять разбиение по страницам. Э.Г.

var listC1 = new List<int> { 1, 2, 3 };
var listC2 = new List<int> { 4, 5, 6, 7 };
var listC3 = new List<int> { 8, 9 };

var listB1 = new List<List<int>> { listC1, listC2 };
var listB2 = new List<List<int>> { listC3 };

var listA1 = new List<List<List<int>>> { listB1, listB2 };

var flatList = listA1.SelectMany(x => x.SelectMany(y => y)).ToList();

var pageSize = 3; //pages -> 1,2,3 | 4,5,6 | 7,8,9
var getPage = 3; //page 3 -> 7,8,9
var getItem = 2; //item 2 -> 8

var result = flatList.Skip((getPage - 1) * pageSize + (getItem - 1)).FirstOrDefault();
//result -> 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...