19.6.5 关于查询变量

在代码清单19-20中,oddNumbers称作查询变量,它包含LINQ查询的结果。LINQ查询可以返回两种类型的结果:“IEnumerable可枚举类型”和“单一值”,详述如下:

❑IEnumerable可枚举类型,在代码清单19-20中,我们并未使用IEnumerable作为变量类型声明查询变量,而是使用的var关键字自动推断oddNumbers的类型。当然也可以直接声明为IEnumerable类型,如下所示:


IEnumerable<int>oddNumbers=from num in numbers

where num%2!=0

select num;


❑除了可以返回集合以外,还可以是一个单一值。例如获取结果集合所包含的元素数,如下所示:


int count=(from num in numbers

where num%2!=0

select num).Count();


需要说明的是,如果LINQ查询返回的是IEnumerable类型,那么无论是查询语法,还是方法语法,都是延迟查询。所谓延迟查询,就是在直接调用结果集合的GetEnumerator方法,或使用foreach来枚举该集合时,才执行LINQ或Lambda表达式表示的查询,并且每次都会重新执行查询;而如果返回单一值,则查询会立即得到执行,查询的结果会赋给查询变量。