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

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

首页 »DotNet » linqjoin:Linq 学习(6) Group & Join »正文

linqjoin:Linq 学习(6) Group & Join

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

  Group

  Group是进行分组操作同SQL中Group By类似

  原型如下: public IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
  this IEnumerable<TSource> source,
  Func<TSource, TKey> keySelector)


  它有几个重载返回类型有两种:IEnumerable<IGrouping<TKey, TSource>> 和 IEnumerable<TResult>

  返回类型为:IEnumerable<IGrouping<TKey, TSource>>

  举例:

  返回按学号分组学生成绩

var result = from score in DataSource.Scores
       group score by score.StudentID o scoreGroup
       select scoreGroup;
  
scoreGroup为IGrouping<TKey, TSource>类型返回结果为IEnumerable<IGrouping<TKey, TSource>>既集合集合因此输出时需用双重循环
IGrouping<TKey, TElement>接口定义为:
public erface IGrouping<TKey, TElement> : IEnumerable<TElement>, IEnumerable
{
  TKey Key { get; }
}


  其中Key为分组依据字段

foreach (var group in result)
{
  //输出分组依据字段
  Console.WriteLine("nStudent ID:" + group.Key);
  // 输出组内成员
  foreach (var score in group)
  {
    Console.WriteLine(score);
  }
}
// result:
// Student ID:1
// Student ID:1,Course ID:1,Score:78
// Student ID:1,Course ID:2,Score:60
// ...
// Student ID:2
// Student ID:2,Course ID:1,Score:59
// ...


  等效扩展思路方法实现为:

var result = DataSource.Scores.GroupBy(score => score.StudentID);

  返回类型为:IEnumerable<TResult>

  对分组结果进行些包装如包装为匿名类型

  返回按学号分组学生成绩

var result = from score in DataSource.Scores
       group score by score.StudentID o scoreGroup
       select { StudentID = scoreGroup.Key, Group = scoreGroup };


  匿名类型中Group为IGrouping<TKey, TSource>类型

  等效扩展思路方法实现为:

var result = DataSource.Scores.GroupBy(score => score.StudentID,
  (key, group) => { StudentID = key, Group = group });


  其他些重载使用思路方法类似

  Join

  连接操作

public IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
  this IEnumerable<TOuter> outer,
  IEnumerable<TInner> inner,
  Func<TOuter, TKey> outerKeySelector,
  Func<TInner, TKey> innerKeySelector,
  Func<TOuter, TInner, TResult> resultSelector)


  从Join思路方法原型可以看出其使用思路方法

  内连接

  选择左右两侧集合都含有相对应元素

  举例:

  查询学生姓名、学科、成绩

var result = from score in DataSource.Scores
       join student in DataSource.Students _disibledevent= Group };


  结束语

  到现在Linq和SQL语言等价操作基本介绍完组合这些操作能实现复杂查询



相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: