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();
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();
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();
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();
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 == "李永京");
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();//就是取任意一个
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);
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);