web-dev-qa-db-fra.com

LINQ avec Skip and Take

J'ai utilisé le code ci-dessous pour prendre certains éléments de IEnumerable, mais il renvoie toujours la source comme nulle et compte comme 0 et en fait il existe des éléments dans IEnumerable

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

Lorsque j'essaie d'accéder à a, il compte 0. Quelque chose ne va pas ici?

enter image description here

15
user1618825

N'oubliez pas que cette variable a dans votre code est un requête elle-même. Ce n'est pas résultat de l'exécution de la requête. Lorsque vous utilisez la fenêtre immédiate pour surveiller la requête (en fait, cela concerne les requêtes dont l'exécution est différée, sinon vous obtiendrez des résultats au lieu de la requête), elle s'affichera toujours.

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

Vous pouvez vérifier cela avec ce code, qui contient évidemment suffisamment d'éléments:

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

Donc, vous devez exécuter votre requête pour voir résultats de l'exécution de la requête. Écrivez dans la fenêtre immédiate:

a.ToList()

Et vous verrez les résultats de l'exécution de la requête:

Count = 3
    [0]: 3
    [1]: 4
    [2]: 5
26
Sergey Berezovskiy