、延迟加载
原来的查询方式如下:
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学习(六)查询补充特性的更多相关文章

  1. 从零开始一起学习SLAM | C++新特性要不要学?

    LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...

  2. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

  3. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  4. Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  5. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  6. TweenMax动画库学习(六)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  8. MyBatis3系列__05查询补充&resultMap与resultType区别

    1.查询补充 当你查询一条记录并且是简单查询时,情况相对简单,可以参考以下的例子: public Employee getEmpById(Integer id); 对应的xml文件中: <sel ...

  9. 可能是最早的学习Android N新特性的文章

    可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...

随机推荐

  1. Android之旅-Intent与Intent Filter[上]

    Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,取决于Intent的各个属性. 一.显式的Intent 明确指定了要启动 ...

  2. sqlserver常用调优脚本

    ------------------------最耗时的sql--------------------------------------- DECLARE @n INT; ; WITH cte1 A ...

  3. python标准库介绍——32 Queue 模块详解

    Queue 模块 ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示. 你可以通过它在多个线程里安全访问同个对象. ==== ...

  4. SNF.Net 快速开发平台Spring.Net.Framework 诞生的由来与规划

    没有快速开发平台的时候只能感慨自己曾经浪费了那么多精力在拖拽控件上,总写重复的代码,却花了很多精力且不能体现自己的价值.SNF快速开发平台能把你解放出来,让你有更多的时间参与到核心业务逻辑中去,让你有 ...

  5. SSO单点登录的发展由来以及实现原理

    单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...

  6. Atitit 大龄软件工程师的出路attilax总结

    Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...

  7. 最新Windows下c++读写锁SRWLock介绍

    https://blog.csdn.net/MoreWindows/article/details/7650574 https://blog.csdn.net/chenzhjlf/article/de ...

  8. 读取JPG图片的Exif属性(一) - Exif信息简介

    https://blog.csdn.net/fioletfly/article/details/53605959 https://blog.csdn.net/a_big_pig/article/det ...

  9. Fluent 18.0新功能之:其他

    ANSYS 18.0在2017年1月底发布,来看看Fluent18.0更新了哪些内容. 1 用户界面 关于用户界面方面的更新包括: (1)可以在树形菜单中同时选择多个子节点,如同时选择多个边界,点击右 ...

  10. 正确使用 Volatile 变量

    Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...