)Result Transformers

public class Order
{
    public DateTime OrderedAt { get; set; }

    public Status Status { get; set; }

    public string CustomerId { get; set; }

    public IList<OrderLine> Lines { get; set; }
}

//单独使用
public class OrderStatisticsTransformer : AbstractTransformerCreationTask<Order>
{
    public OrderStatisticsTransformer()
    {
        TransformResults = orders => from order in orders
                                     select new
                                            {
                                                order.OrderedAt,
                                                order.Status,
                                                order.CustomerId,
                                                CustomerName = LoadDocument<Customer>(order.CustomerId).Name,
                                                LinesCount = order.Lines.Count
                                            };
    }
}

public class OrderStatistics
{
    public DateTime OrderedAt { get; set; }

    public Status Status { get; set; }

    public string CustomerId { get; set; }

    public string CustomerName { get; set; }

    public int LinesCount { get; set; }
}

//配合查询使用
IList<OrderStatistics> statistics = session.Query<Order>()
    .TransformWith<OrderStatisticsTransformer, OrderStatistics>()
    .Where(x => x.CustomerId == "customers/1")
    .ToList();

OrderStatistics statistic = session.Load<OrderStatisticsTransformer, OrderStatistics>("orders/1");

) OfType<T>
 OfType<T>是在客户端进行数据转换
比如说我们有一个这样的索引:
public class Product_ByQuantity : AbstractIndexCreationTask<Product>
{
    public Product_ByQuantity()
    {
        Map = products => from product in products
                          select new
                          {
                              QuantityInWarehouse = product.QuantityInWarehouse
                          };

        TransformResults = (database, results) => from r in results
                                                  select new
                                                  {
                                                      Name = r.Name,
                                                      Description = r.Description
                                                  };
    }
}

产品类:
public class Product
{
    public string Id { get; set; }
    public string ArticleNumber { get; set; }
    public string Name { get; set; }
    public string Manufacturer { get; set; }
    public string Description { get; set; }
    public int QuantityInWarehouse { get; set; }
}

返回结果类:
public class ProductViewModel
{
    public string Name { get; set; }
    public string Description { get; set; }
}

查询的之后,进行转换
List<ProductViewModel> products = session.Query<Product, Product_ByQuantity>()
                                         .Where(x => x.QuantityInWarehouse > )
                                         .OfType<ProductViewModel>()
                                         .ToList();
)ProjectFromIndexFieldsInto

这是map-only的索引

public class Product_ByQuantityNameAndDescription : AbstractIndexCreationTask<Product>
{
    public Product_ByQuantityNameAndDescription()
    {
        Map = products => from product in products
                          select new
                          {
                              QuantityInWarehouse = product.QuantityInWarehouse,
                              Name = product.Name,
                              Description = product.Description
                          };

        Stores.Add(x => x.Name, FieldStorage.Yes);
        Stores.Add(x => x.Description, FieldStorage.Yes);
    }
}

//查询
List<ProductViewModel> products = session.Query<Product, Product_ByQuantityNameAndDescription>()
                                         .Where(x => x.QuantityInWarehouse > )
                                         .ProjectFromIndexFieldsInto<ProductViewModel>()
                                         .ToList();

)客户端转换

索引的定义:
public class Product_ById : AbstractIndexCreationTask<ProductItem>
{
    public Product_ById()
    {
        Map = products => from product in products
                          select new
                          {
                              product.Id
                          };
    }
}

var warehouses = session.Query<dynamic, Product_ById>()
    .Customize(x => x.TransformResults((query, results) =>
        results.Cast<dynamic>().GroupBy(p => p.WarehouseId).Select(g =>
        {
            ;
            ;

            var products = g.Select(product =>
            {
                count++;
                totalSum += product.Price;
                return new ProductItemViewModel
                           {
                               Name = product.Name,
                               Description = product.Description
                           };
            }).ToList();

            return new Warehouse()
                       {
                           Id = g.Key,
                           Products = products,
                           AverageProductPrice = totalSum / count,
                       };
        }))).ToList();

RavenDb学习(五)结果转换的更多相关文章

  1. cesium 学习(五) 加载场景模型

    cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...

  2. C# 词法分析器(五)转换 DFA

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 在上一篇文章中,已经得到了与正则表达式等价的 NFA ...

  3. TweenMax动画库学习(五)

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

  4. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  5. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...

  7. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  8. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

  9. Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter

    类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...

随机推荐

  1. Tomcat7启动报Error listenerStart错误

    问题 Tomcat7在启动时报错,详细信息如下: 十一月 23, 2013 7:21:58 下午 org.apache.catalina.core.StandardContext startInter ...

  2. Subversion代码提交中的org.apache.subversion.javahl.ClientException: svn: E200007: Commit failed异常解决

    : 在切换subversion服务器地址之后,发生的无法正确提交代码的问题org.apache.subversion.javahl.ClientException: svn: E200007: Com ...

  3. php实现文件下载代码一例

    php实现文件下载代码 需要用到header函数来发送相关信息给客户端浏览器,同时再结合filesize函数来读取文件大小并进行下载操作.简单的文件下载只需要使用HTML的连接标记<a>, ...

  4. javascript <a> 标签打开相对路径,绝对路径

    <a>标签中的href中,如果你写一个路径默认是以相对路径打开的,加上"http://" 消息头那就可以打开绝对路径 html: <a href=javascri ...

  5. 抛弃百度UMEditor,拥抱summernote (解决上传文件又慢又卡的问题)

    由于一些项目上的原因以及相关因素,我们使用其他富文本编辑器替代了UMEditor 本来用CKEditor,但是团队觉得使用起来很不顺手,尤其图片上传十分不爽,功能复杂但是使用起来比较麻烦 后来我们又替 ...

  6. 译: 2. Apache Axis2安装指南

    Apache Axis2安装指南 本文档提供有关Axis2分发包,系统先决条件以及设置环境变量和工具的信息,然后提供有关安装方法的详细说明. 请将您的反馈发送至:java-dev@axis.apach ...

  7. Newton差分插值性质证明(均差与差分的关系证明)

  8. RHEL7 富规则删除

    1. 查看已经创建好的富规则 firewall-cmd --list-rich-rules 2. 删除富规则(******代表已经创建好的完整富规则内容) firewall-cmd --remove- ...

  9. C#对Sql Server TEXT字段存储的实现(使用存储过程)

    1.这里先准备数据库:在数据库中建立一个News数据表,字段为id,title,content2.建立用于插入news的存储过程:NewsInsert和NewsUpdate,代码如下: ),@cont ...

  10. 利用babel-cli搭建支持ES6的node环境

    现在ES6盛行,开始大量使用ES6的特性敲代码,但限于Node.js本身对ES6的特性支持的不够完备,那么需要借助于其他工具来完成. 基本上,现在都直接写ES6的代码,然后使用babel-cli提供的 ...