RavenDb学习(六)查询补充特性
时间:2022-04-29
本文章向大家介绍RavenDb学习(六)查询补充特性,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、延迟加载
原来的查询方式如下:
IEnumerable<User> users = session
.Query<User>()
.Where(x => x.Name == "john");
延迟加载方式:
Lazy<IEnumerable<User>> lazyUsers = session
.Query<User>()
.Where(x => x.Name == "John")
.Lazily();
IEnumerable<User> users = lazyUsers.Value;
//一次执行所有延迟操作
IEnumerable<User> users = null;
IEnumerable<City> cities = null;
session
.Query<User>()
.Where(x => x.Name == "John")
.Lazily(x => users = x);
session
.Query<City>()
.Where(x => x.Name == "New York")
.Lazily(x => cities = x);
session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();
//lucene的也支持
Lazy<IEnumerable<User>> users = session.Advanced
.LuceneQuery<User>()
.WhereEquals("Name", "John")
.Lazily();
2、交集
在服务端进行交集操作,只返回符合全部条件的数据
session.Query<TShirt>("TShirtIndex")
.Where(x => x.Manufacturer == "Raven")
.Intersect()
.Where(x => x.Types.Any(t => t.Color == "Blue" && t.Size == "Small"))
.Intersect()
.Where(x => x.Types.Any(t => t.Color == "Gray" && t.Size == "Large"))
.ToList();
或者这么写
session.Advanced.LuceneQuery<TShirt>("TShirtIndex")
.Where("Manufacturer:Raven INTERSECT Color:Blue AND Size:Small INTERSECT Color:Gray AND Size:Large")
.ToList();
3、禁止缓存和跟踪
session.Query<User>().Customize(x => x.NoCaching());
session.Query<User>().Customize(x => x.NoTracking());
4、动态聚合
假设我们有一条这样的sql语句
select sum(Total) from Orders where Total > 500 group by Product
linq的写法是:
var result = session.Query<Order>("Orders/All")
.Where(x => x.Total > 500)
.AggregateBy(x => x.Product)
.SumOn(x => x.Total)
.ToList();
store的
store.DatabaseCommands.PutIndex("Orders/All", new IndexDefinitionBuilder<Order>()
{
Map = orders => from order in orders
select new
{
order.Total,
order.Product,
order.Concurrency
},
SortOptions = { { x => x.Product, SortOptions.Double } }
});
扩展查询:
result = session.Query<Order>("Orders/All")
.AggregateBy(x => x.Product)
.AddRanges(x => x.Total < 100,
x => x.Total >= 100 && x.Total < 500,
x => x.Total >= 500 && x.Total < 1500,
x => x.Total >= 1500)
.SumOn(x => x.Total)
.ToList();
result = session.Query<Order>("Orders/All")
.AggregateBy(x => x.Product)
.SumOn(x => x.Total)
.CountOn(x => x.Total)
.AndAggregateOn(x => x.Concurrency)
.MinOn(x => x.Total)
.ToList();
result = session.Query<Order>("Orders/All")
.AggregateBy(x => x.Product)
.SumOn(x => x.Total)
.CountOn(x => x.Total)
.AndAggregateOn(x => x.Concurrency)
.MinOn(x => x.Total)
.ToList();
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法