LINQ with Skip and Take

15 c# linq skip take

我使用下面的代码从中获取一些项目IEnumerable,但它始终将源返回为null并计为0并且实际上存在项目IEnumerable

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

当我尝试访问a它时,它有数量0.这里出了什么问题?

在此输入图像描述

Ser*_*kiy 29

请记住,a代码中的变量本身就是一个查询.它不是查询执行的结果.当您使用立即窗口来查看查询时(实际上与延迟执行的查询有关,否则您将有结果而不是查询),它将始终显示

{System.Linq.Enumerable.TakeIterator<int>}
    count: 0
    source: null
Run Code Online (Sandbox Code Playgroud)

您可以使用此代码验证,显然有足够的项目:

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

因此,您应该执行查询以查看查询执行的结果.写入立即窗口:

a.ToList()
Run Code Online (Sandbox Code Playgroud)

您将看到查询执行的结果:

Count = 3
    [0]: 3
    [1]: 4
    [2]: 5
Run Code Online (Sandbox Code Playgroud)

  • 而已。http://msdn.microsoft.com/zh-cn/library/bb503062.aspx“立即返回值是一个对象,该对象存储执行操作所需的所有信息。直到该方法表示的查询才会执行通过直接调用其GetEnumerator方法或使用foreach来枚举该对象 (2认同)