技术开发 频道

NH剖析:Query篇之NHibernate.Linq查询

  4.分区运算符

  •   Skip:返回跳过指定数目项目的序列
  •   SkipWhile:返回跳过不满足表达式项目的序列
  •   Take:返回具有指定数目项目的序列
  •   TakeWhile:返回具有满足表达式项目的序列

  说明:不支持SkipWhile和TakeWhile。不支持连写多个Take或者Skip。

//Code Snippets Copyright http://lyj.cnblogs.com/
var partitioningquery
= (from user in session.Query<User>()
              
select user).Take(2).Skip(2).ToList();

var partitioningquery2
= session.Query<User>().Take(2).Skip(2).ToList();

 

  5.排序运算符

  •   OrderBy:以升序按值排列序列
  •   OrderByDescending:以降序按值排列序列
  •   ThenBy:升序排列已排序的序列
  •   ThenByDescending:降序排列已排序的序列
  •   Reverse:颠倒序列中项目的顺序(用于操作集合)

  说明:排序运算符不支持子查询。

//Code Snippets Copyright http://lyj.cnblogs.com/
var orderingquery
= (from user in session.Query<User>()
               orderby user.Id descending, user.Name ascending
              
select user).ToList();

var orderingquery2
= session.Query<User>()
    .OrderByDescending(o
=> o.Id).OrderBy(o=>o.Name).ToList();

 

  6.分组运算符

  •  GroupBy:按指定分组方法对序列中的项目进行分组

  例如下面查询:

//Code Snippets Copyright http://lyj.cnblogs.com/
var groupquery
= (from user in session.Query<User>()
                  group user by user.Name
                      into g
                      
select new
                      {
                          g.Key,
                          Age
= g.Sum(p => p.Age)
                      }).ToList();
var groupquery2
= session.Query<User>().GroupBy(o => o.Name)
    .Select(o
=>new { o.Key, Age = o.Sum(p => p.Age)}).ToList();

 

  7.设置运算符

  •   Distinct:返回无重复项目的序列
  •   Except:返回代表两个序列差集的序列(用于操作集合)
  •   Intersect:返回代表两个序列交集的序列(用于操作集合)
  •   Union:返回代表两个序列交集的序列(用于操作集合)

  目前支持Distinct:

//Code Snippets Copyright http://lyj.cnblogs.com/
var distinctquery
= session.Query<User>().Distinct().ToList();

 

  8.转换运算符(用于操作集合)

  •   Cast:将序列中的元素转换成指定类型
  •   OfType:筛选序列中指定类型的元素
  •   ToArray:从序列返回一个数组
  •   ToDictionary:从序列返回一个字典
  •   ToList:从序列返回一个列表
  •   ToLookup:从序列返回一个查询
  •   ToSequence:返回一个IEnumerable序列

  NHibernate.Linq不需要支持。

  9.元素运算符

  •   DefaultIfEmpty:为空序列创建默认元素(用于操作集合)
  •   ElementAt:返回序列中指定索引的元素(用于操作集合)
  •   ElementAtOrDefault:返回序列中指定索引的元素,或者如果索引超出范围,则返回默认值(用于操作集合)
  •   First:返回序列中的第一个元素
  •   FirstOrDefault:返回序列中的第一个元素,或者如果未找到元素,则返回默认值
  •   Last:返回序列中的最后一个元素(用于操作集合)
  •   LastOrDefault:返回序列中的最后一个元素,或者如果未找到元素,则返回默认值(用于操作集合)
  •   Single:返回序列中的单个元素
  •   SingleOrDefault:返回序列中的单个元素,或者如果未找到元素,则返回默认值

  例如下面例子:

//Code Snippets Copyright http://lyj.cnblogs.com/
var firstquery
= session.Query<User>().First(u => u.Name == "李永京");
var firstOrDefaultquery
= session.Query<User>().FirstOrDefault(u => u.Name == "李永京");

var singlequery
= session.Query<User>().Single(u => u.Name == "李永京");
var singleOrDefaultquery
= session.Query<User>().SingleOrDefault(u => u.Name == "李永京");

 

  10.生成运算符(用于操作集合)

  •   Empty:生成一个空序列
  •   Range:生成一个指定范围的序列
  •   Repeat:通过将某个项目重复指定次数来生成一个序列

  NHibernate.Linq不需要支持。

  11.限定符

  •   All:确定序列中的所有项目是否满足某个条件
  •   Any:确定序列中是否有任何项目满足条件
  •   Contains:确定序列是否包含指定项目

  仅写下Any示例:

//Code Snippets Copyright http://lyj.cnblogs.com/
var anyquery
= session.Query<User>().Any();//就是取任意一个

 

  12.聚合运算符

  •   Aggregate:对序列执行一个自定义方法
  •   Average:计算数值序列的平均值
  •   Count:返回序列中的项目数(整数)
  •   LongCount:返回序列中的项目数(长型)
  •   Min:查找数字序列中的最小数
  •   Max:查找数字序列中的最大数
  •   Sum:汇总序列中的数字

  一些简单例子:

//Code Snippets Copyright http://lyj.cnblogs.com/
var aggregatequery
= session.Query<User>()
    .Where(o
=> o.Name.Contains("李永京"))
    .Select(o
=> o.Id)
    .Aggregate(
new StringBuilder(), (sb, id) => sb.Append(id).Append(","));
var average
= session.Query<User>().Average(u => u.Age);
var countquery
= session.Query<User>().Count();
var longCountquery
= session.Query<User>().LongCount();
var minquery
= session.Query<User>().Min(u => u.Age);
var maxquery
= session.Query<User>().Max(u => u.Age);
var sumquery
= session.Query<User>().Sum(u => u.Age);

  

0
相关文章