Enumerable.Select的lambda表达式

时间:2011-08-17 07:07:06

标签: c# linq lambda

我正在试图弄清楚如何开始使用linq和lambda表达式。

首先,如果有人可以指导我学习一些好的教程,那将非常感激。

其次:

我正在尝试使用Select方法选择所有等于特定值的值。

我注意到select可以用

定义
Select<TSource,TResult>(...lambda expression...)  

现在为此目的,我想选择所有等于5的数字。

int[] numbers = { 1, 2, 3, 4, 5, 5, 5, 6, 7, 8 };
IEnumerable<int> res = numbers.Select( x=>5 );    

这不起作用,我只是不明白这是如何工作的。 我应该在什么情况下定义TSourceTResult,以及在这种情况下它们会是什么?

提前致谢!

1 个答案:

答案 0 :(得分:14)

Select()用于将旧序列的每个成员投影到新序列的新成员中。要进行过滤,请使用Where()

var evens = numbers.Where(x => x % 2 == 0);
var theFiveSequence = numbers.Where(x => x == 5);

使用Select()的示例可能是将每个数字乘以2:

var doubledNumbers = numbers.Select(x => 2*x);

您也可以将这些方法组合在一起:

var doubledNumbersLessThanTen = numbers.Select(x => 2*x).Where(x < 10);

关于LINQ需要记住的两件重要事情:

  1. 基本序列的元素(几乎总是)修改。您可以从旧序列创建新序列。
  2. 您编写的查询会被懒惰地评估。在foreach循环中使用它们,或致电.ToList().ToArray()等之前,您不会从中获得结果。