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]()
Ответы
Ответ 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);