、延迟加载
原来的查询方式如下:
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. 目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练

    将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练. import xml.etree.ElementTree as ET import numpy as ...

  2. C#基础第九天-作业-储蓄账户(SavingAccount)和信用账户(CreditAccount)

    要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...

  3. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

  4. java的跳转和重定向,加载显示层

    HttpServltRequest  req,   HttpDervletResponse resp 的 req.sendRedirect('页面');跳转到页面  浏览器地址跳转 --------- ...

  5. nmap 端口扫描工具

    nmap工具介绍 一.简介 nmap :也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务 ...

  6. sudo 的介绍

    http://chenfage.blog.51cto.com/8804946/1830424

  7. ISO-OSI的七层协议经典架构

    OSI(Open System interconnection)开放系统互连参考模型 ISO(International Standards Organization)国际标准化组织 第一层:物理层 ...

  8. 【Unity】9.2 如何添加粒子组件

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 粒子系统是作为组件附加到游戏对象上的,有两种添加办法. 二.方式1--添加已制作好的预制体 第1种方式是直接添加已经制作 ...

  9. placement new (转)

    原文出自:http://www.cnblogs.com/wanghetao/archive/2011/11/21/2257403.html 1. placement new的含义placement n ...

  10. PCA,SVD

    PCA的数学原理 https://www.zhihu.com/question/34143886/answer/196294308 奇异值分解的揭秘(二):降维与奇异向量的意义 奇异值分解的揭秘(一) ...