Подтвердить что ты не робот

LINQ с пропуском и приемом

Я использовал приведенный ниже код, чтобы взять некоторые элементы из IEnumerable, но он всегда возвращает исходный код как null и считается 0, и на самом деле есть элементы в IEnumerable

private void GetItemsPrice(IEnumerable<Item> items, int customerNumber)
{
    var a = items.Skip(2).Take(5);
}

Когда я пытаюсь получить доступ к a, он имеет счетчик 0. Что-то здесь не так?

enter image description here

4b9b3361

Ответ 1

Помните, что эта переменная a в вашем коде - это запрос. Это не результат выполнения запроса. Когда вы используете окно Immediate для просмотра запроса (на самом деле это относится к запросам, отложенным исполнением, иначе у вас будут результаты вместо запроса), он всегда будет показывать

{System.Linq.Enumerable.TakeIterator<int>}
    count: 0
    source: null

Вы можете проверить, что с помощью этого кода, который, очевидно, имеет достаточно элементов:

int[] items = { 1, 2, 3, 4, 5, 6, 7 };
var a = items.Skip(2).Take(3);

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

a.ToList()

И вы увидите результаты выполнения запроса:

Count = 3
    [0]: 3
    [1]: 4
    [2]: 5

Ответ 2

вам нужно проверить, есть ли у вас элементы в вашей коллекции

private void GetItemsPrice(IEnumerable<Item> items, int customerNumber)
{
   var a;
   if(items.Count > 2)
     a = items.Skip(2).Take(5);
   else 
     MessageBos.Show("Error in Items number");
}

это просто для тестирования, если проблема с количеством элементов.

РЕДАКТИРОВАТЬ: единственная причина получить a.Count = 0, что ваш предмет содержит менее 3 предметов!

вы можете проверить этот PLS и дать результат сообщения

MessageBox.Show("count Items in list:" + items.Count);
var  a = items.Skip(2).Take(5);
MessageBox.Show("count Items in A :" + a.Count);