Select操作符用于根据输入序列中的元素创建相应的输出序列中的元素,输出序列中的元素类型可以与输入序列中的元素类型相同,也可以不同。
Select操作符原型有两个,第一个原型定义如下:
public static IEnumerable<TResult > Select<TSource, TResult >(this IEnumerable<TSource > source, Func<TSource, TResult > selector);
Select操作符会将集合中的每个元素都传入到委托参数中,返回委托参数加工后序列,如下示例,我们先定义一个People类,包含Name和Age字段,然后我只查询People集合中的Name信息。
class People
{
public String Name{get;set;}
public int Age{get;set;}
}
static void Main(string[] args)
{
List<People > list = new List<People >();
list.Add(new People() { Name = "李四", Age = 21 });
list.Add(new People() { Name = "张三", Age = 20 });
list.Add(new People() { Name = "王五", Age = 24 });
var query = list.Select(p = > new { p.Name });
foreach (var item in query)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
输出效果如下:
第二个原型定义如下:
public static IEnumerable<TResult > Select<TSource, TResult >(this IEnumerable<TSource > source, Func<TSource, int, TResult > selector);
对比第一个原型定义,发现委托参数中多了一个int参数,这个参数是集合的下标,从0开始,如下示例,我们不仅输出People的名字,还输出他们在集合中的位置:
static void Main(string[] args)
{
List<People > list = new List<People >();
list.Add(new People() { Name = "李四", Age = 21 });
list.Add(new People() { Name = "张三", Age = 20 });
list.Add(new People() { Name = "王五", Age = 24 });
var query = list.Select((p, i) = > new { Name = p.Name, Index = i });
foreach (var item in query)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
输出效果如下:
楸砗褪油脊钩? 可以把数据字典划分为静态数据字典和动态性能表两大类。