web-dev-qa-db-ja.com

スキップアンドテイク付き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

15
user1618825

コードの変数aクエリ自体であることを忘れないでください。 クエリ実行の結果ではありません。イミディエイトウィンドウを使用してクエリを監視している場合(実際には、実行を遅延したクエリに関連する場合はクエリの代わりに結果が表示されます)、常に表示されます

{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
26