RavenDb学习(六)查询补充特性
、延迟加载
原来的查询方式如下:
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();
、交集
在服务端进行交集操作,只返回符合全部条件的数据
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();
、禁止缓存和跟踪
session.Query<User>().Customize(x => x.NoCaching());
session.Query<User>().Customize(x => x.NoTracking());
、动态聚合
假设我们有一条这样的sql语句
group by Product
linq的写法是:
var result = session.Query<Order>("Orders/All")
.Where(x => x.Total > )
.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 < ,
x => x.Total >= && x.Total < ,
x => x.Total >= && x.Total < ,
x => x.Total >= )
.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();
RavenDb学习(六)查询补充特性的更多相关文章
- 从零开始一起学习SLAM | C++新特性要不要学?
LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...
- day 84 Vue学习六之axios、vuex、脚手架中组件传值
Vue学习六之axios.vuex.脚手架中组件传值 本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- (转)MyBatis框架的学习(六)——MyBatis整合Spring
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...
- TweenMax动画库学习(六)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- MyBatis3系列__05查询补充&resultMap与resultType区别
1.查询补充 当你查询一条记录并且是简单查询时,情况相对简单,可以参考以下的例子: public Employee getEmpById(Integer id); 对应的xml文件中: <sel ...
- 可能是最早的学习Android N新特性的文章
可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...
随机推荐
- Recyclerview 出现 java.lang.IndexOutOfBoundsException: Inconsistency detected 异常
使用 RecyclerView 的时候报错 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view hold ...
- ThinkPHP32 MODULE_ALLOW_LIST 存在的bug 不生效
1)BUG: 假设存在Api Home Admin Member 模块.仅仅想让用户訪问 Api Home,不同意訪问Admin Member. 必须将Admin Member 写在 MODULE_D ...
- redisHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using ServiceS ...
- socket.io笔记二之事件监听回调函数接收一个客户端的回调函数
//服务端 socket.on('test', function (name, fn) { console.log(name) //输出yes fn('woot'); }); //客户端 socket ...
- Java 的双重分发与 Visitor 模式
双重分发(Double Dispatch) 什么是双重分发? 谈起面向对象的程序设计时,常说起的面向对象的「多态」,其中关于多态,经常有一个说法是「父类引用指向子类对象」. 这种父类的引用指向子类对象 ...
- mysql备份的三种方式详解
一.备份的目的 做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 二.备份需要考虑的问题 可以容忍丢失多长时间的数据:恢复数据要在多长时间内 ...
- .NET微信扫码支付模式二API接口开发测试
主要实现微信扫码支付,官网的SDKdemo 就不要使用 一直不能调试通过的,还是自己按照API接口文档一步一步来实现,吐槽下微信一点责任感都木有,能不能demo搞个正常的吗,不要坑惨了一大群码农们有点 ...
- oracle 负载均衡连接方式常用SQL语句备忘录
1.---表中有重复记录用SQL语句查询出来 select * from Recharge where RechargeSerial in (select RechargeSerial from Re ...
- 每日英语:How the College Bubble Will Pop
The American political class has long held that higher education is vital to individual and national ...
- Android 编程下 Eclipse 恢复被删除的文件
开发过程中文件误删除,又没有 Git,SVN 等版本控制软件的备份,怎么办? Eclipse 自带了恢复历史文件的功能:在项目上点击右键,选择 Restore from Local History,在 ...