专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » linq排序:Linq 学习(4) 投影、筛选和排序 »正文

linq排序:Linq 学习(4) 投影、筛选和排序

来源: 发布时间:星期五, 2009年1月9日 浏览:27次 评论:0
  这里简单介绍Linq投影、筛选和排序子句

  Select

  select 在个集合序列按给定条件进行投影select 可以返回组合筛选结果返回匿名类型对返回结果进行操作返回组合子查询结果等等

  select 思路方法定义原形为:

public IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)

  该扩展思路方法是在Enumerable类型中定义

  // 数据源类型属性

var result = from student in DataSource.Students
       where student.Name.Length > 3
       select student.Name;


  // 数据源类型筛选后结果

var result = from student in DataSource.Students
       where student.Name.Length > 3
       select student;


  // 新类型

var result = from student in DataSource.Students
       where student.Name.Length > 3
       select Student { Name = student.Name, StudentID = student.StudentID };


  // 匿名类型

var result = from student in DataSource.Students
       where student.Name.Length > 3
       select { Name = student.Name, StudentID = student.StudentID };


  // 对返回结果进行操作

var result = from student in DataSource.Students
       where student.Name.Length > 3
       select student.;


  由Select思路方法原型可看出返回结果为:IEnumerable<T>类型

  SelectMany

  SelectMany定义原型为:

public IEnumerable<TResult> SelectMany<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector)

  通过原型可以看出筛选结果个元素类型都应该实现IEnumerable<T>接口

  实现了IEnumerable<T>接口可以构造这样场景:查询组成学生姓名所有序列

  var result = DataSource.Students.SelectMany(str => str.Name);

  等价Select 子句为:

var result = from student in DataSource.Students
       from ch in student.Name
       select ch;


  可以认为SelectMany是将序列每个元素投影到 IEnumerable<(Of <(T>)>) 并将结果序列合并为个序列

  Distinct

  原型为:

  public IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source)

  去掉投影结果集重复元素该运算只能以思路方法方式进行操作

  上面同样场景:查询组成学生姓名所有不重复序列

  var result = DataSource.Students.SelectMany(str => str.Name).Distinct;

  First、Last、Skip、Take、Single

  First 选择集和个元素

  var result = DataSource.Students.Select(student => student).First; // Student ID:1,Student Name:Andy

  Last 选择集和最后个元素



  var result = DataSource.Students.Select(student => student).Last; // Student ID:4,Student Name:Dark

  Skip 跳过N个元素

  var result = DataSource.Students.Select(student => student).Skip(2).Count; // 2

  Take 选择集合前N个元素

  var result = DataSource.Students.Select(student => student).Skip(2).Take(1).Count; // 1

  Single 返回序列元素;如果该序列并非恰好包含个元素则会引发异常

  var result = DataSource.Students.Select(student => student).Single; // 异常:Sequence contains more than _disibledevent=> student.Name);

  // 结果:

// Dark
// Cindy
// Bill
// Andy


  下篇介绍集合操作



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: