前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RavenDb学习(六)查询补充特性

RavenDb学习(六)查询补充特性

作者头像
岑玉海
发布2018-03-01 11:28:01
6050
发布2018-03-01 11:28:01
举报
文章被收录于专栏:岑玉海岑玉海
代码语言:javascript
复制
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();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档