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

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

首页 »DotNet » linq学习:Linq 学习(5) 集合操作 »正文

linq学习:Linq 学习(5) 集合操作

来源: 发布时间:星期五, 2009年1月9日 浏览:21次 评论:0
  本篇介绍Linq集合操作继续使用Linq 学习(3) 语法结构中介绍数据源

  Count/LongCount

  Count/LongCount 返回结果集中元素数量返回类型分别为/long

  原型为:

public Count<TSource>(this IEnumerable<TSource> source[, Func<TSource, bool> predicate])

  姓名长度大于 4个学生数量:

var result = (from student in DataSource.Students
       select student).Count(stu => { stu.Name.Length > 4; }); // result: 1
  
Sum/Min/Max/Average


  分别返回结果集元素或其属性和、最小值、最大值、平均值

  Sum:返回集合元素参和计算集合元素必须为基本值类型或可空类型

  计算总分:

  var result = (from score in DataSource.Scores

  select score).Sum(score => { score.Value; });

  Min/Max:结果集元素最大值或最小值要求集合元素实现IComparable<T> 或 IComparable接口

  选择最高成绩:

var result = (from score in DataSource.Scores
       select score).Max(score => { score.Value; }); // result: 96


  Average:返回集合元素平均值参和计算集合元素必须为基本值类型或可空类型

  计算平均成绩:

var result = (from score in DataSource.Scores
       select score).Average(score => { score.Value; }).("F2"); // result: 75.23


  Union

  联合两个拥有相同或相似元素集合不去掉重复元素

  Union原型为:

public IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
  
var result = DataSource.Students.Union(DataSource.Students2);


  // result: 两个集合所有元素集合

  Aggregate

  Aggregate是最灵活操作符有些前面Sum/Min/Max/Average不支持类型可以自己定义其实现

  Aggregate原型为:

public TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector)

  source

  要聚合 IEnumerable<(Of <(T>)>)

  seed

  累加器

  func

  要对每个元素累加器

  resultSelector

  将累加器最终值转换为结果值

  返回所有学生姓名串(相当于自定义Sum):

var result = (from student in DataSource.Students
       select student.Name)
       .Aggregate("Name:", (a, b) => a + " " + b, c => c + " n");
// result: Name: Andy Bill Cindy Dark


  选择学生姓名(按串排序取最大相当于实现Max):

var result = (from student in DataSource.Students
       select student.Name).Aggregate((a, b) => .Compare(a, b) > 0 ? a : b);
// result: Dark


  算分数平均值(返回Score对象相当于自定义Average):

var collection = from score in DataSource.Scores
       select score;
var result = collection.Aggregate( Score { Value = 0 },
  (a, b) => { Score { Value = a.Value + b.Value }; },
  c => Score { Value = c.Value / collection.Count }).Value.("F2");
// result: 75.23


  Aggregate 可以灵活实现各种自定义功能

  集合操作会影响Linq执行效率执行集合操作时会遍历甚至多次遍历集合元素;对Linq延迟执行也会变为立即执行后面介绍性能优化时会讨论

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: