RavenDb学习(五)结果转换
)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学习(五)结果转换的更多相关文章
- cesium 学习(五) 加载场景模型
cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...
- C# 词法分析器(五)转换 DFA
系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 在上一篇文章中,已经得到了与正则表达式等价的 NFA ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- ZigBee学习五 无线温度检测
ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- Python基础学习五
Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...
随机推荐
- Android 上传文件,图片。以及服务器端接收相关。
前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图.要查看全图就要先指定照片的存放路径.以后我会修改那个文章.今天先说下图片,文件等上传的实现.接着拿照片说事,光照完了不行还得往服务器 ...
- Yii2 使用 faker 生成假数据(转)
测试过程中有时候需要生成大量的假数据,faker 是一个生成假数据的类库,可以生成姓名,电话,IP地址,密码,ISBN等等你能想到的或者你想不到的各种类型的假数据. Yii2.0已经集成该类库,不用再 ...
- MySQL自成一派的查询提示
[查询提示] MySQL中可以给select语句各种提示,比如告诉它“查询的结果集特别大,请直接用磁盘临时表”,“请让这条select优先执行” .... [查询提示:与结果集相关] 与结果集相关的查 ...
- [svc]traceroute(udp+icmp)&tracert(icmp)原理
2018年4月11日 11:41:29更新 工具 发包 触发点 结局 traceroute 初始发udp包 ttl递增,icmp每一跳报ttl超时 udp端口不可达 tracert 初始发icmp r ...
- 03.反射--01【反射机制】【反射的应用场景】【Tomcat服务器】
https://blog.csdn.net/benjaminzhang666/article/details/9408611 https://blog.csdn.net/benjaminzhang66 ...
- 【Linux】了解服务器的情况
Java程序大多数都部署在Unix环境,而环境的稳定性对于部署的应用至关重要,所以Java开发人员需知道了解Unix环境的命令. 系统版本 查看系统版本 [root@localhost third_p ...
- python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool
报错信息 Traceback (most recent call last): File "<stdin>", line 1, in <module> Fi ...
- webpack学习文档
webpack课程 目录 第1章 webpack简介... 1 1.1 webpack是什么?... 1 1.2 官网地址... 2 1.3 为什么使用 webpack?... 3 ...
- openfire ping的smack解决方案(维持在线状态)
连接中关联如下: // iq提供者 roviderManager.getInstance().addIQProvider("ping", "urn:xmpp:ping&q ...
- ThinkPad X220 完美黑苹果 Hackintosh OS X 10.11 El Capitan
原文链接:https://www.gaojinan.com/thinkpad-x220-hackintosh-osx-10-11-el-capitan-perfect.html //Update 20 ...