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 ...
随机推荐
- Linux下多路复用IO接口epoll/select/poll的区别
select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...
- []如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- 创建多模块springcloud应用eureka server和client和消费端demo
使用环境是 STS + maven 1 创建父级 项目,springcloud-demo1 new -> maven project -> 按照要求进行配置即可.然后删除 src目录,因为 ...
- hudson用SVN插件下载代码,用ant插件打包, 用SSH插件部署
hudson自动化部署步骤 1.SVN插件->下载代码 2.ant插件->war打包 (hudson服务器上可安装多个版本ant,每个项目可以选择一个ant版本.Build File ...
- sqlite 判断表中是否包含 某个字段
数据库 都有一个 根表..(我的理解) 也就是 你创建了一个数据库 里面就带有 一个表 sqlite_master 字段有 type , name , tbl_name , rootpage ,sq ...
- 在 Windows Server 2008 中部署带 SignalR 的网站出错
一直是在 Windows Server 2008 R2 或更高版本的 Windows 中进行部署,没有遇到过此现象,不知道是不是因为系统的原因. 现象为从浏览器访问配置 signalr 的地址返回 4 ...
- [CTCI] 单词最近距离
单词最近距离 题目描述 有一篇文章内含多个单词,现给定两个单词,请设计一个高效算法,找出文中这两个单词的最短距离(即最少相隔的单词数,也就是两个单词在文章中位置的差的绝对值). 给定一个string数 ...
- 运行jar乱码问题
请使用 1.java -jar -Dfile.encoding=utf-8 dapao.jar 2.请使用URLDecode,URLEncode 3.请使用unicode编码格式 bat运行当前目录 ...
- Net AOP(五) 各种IoC框架下实现AOP
public interface IUserProcessor { void RegUser(User user); } public class UserProcessor : IUserProce ...
- 【工具】我的Eclipse使用习惯
查看代码结构 查看类的层级结构,可用选中类名,按F4,可查看: 类的层级结构: 类的上级结构: 类的下级结构: 安装反编译工具Eclipse Class Decompiler 在Eclipse Mar ...