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 ...
随机推荐
- Java – How to add days to current date
1. Calendar.add Example to add 1 year, 1 month, 1 day, 1 hour, 1 minute and 1 second to the current ...
- python标准库介绍——35 pipes 模块详解
==pipes 模块== (只用于 Unix) ``pipes`` 模块提供了 "转换管道 (conversion pipelines)" 的支持. 你可以创建包含许多外部工具调用 ...
- swagger配置和简单使用
说明:本地环境idea + maven3.5 + springboot2.0.0 + springfox-swagger2 2.8.0 + springfox-swagger-ui 2.8.0 + ...
- talend 将hbase中数据导入到mysql中
首先,解决talend连接hbase的问题: 公司使用的机器是HDP2.2的机器,上面配置好Hbase服务,在集群的/etc/hbase/conf/hbase-site.xml下,有如下配置: < ...
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.180 Windows版本号正式公布
ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正. 下一版本号公布时间.7月15日.敬请关注. ENTBOOS ...
- mysql中tinyint、smallint、int、bigint的区别
tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据.存储大小为 1 个字节. unsigned 是从 0 到 255 的整型数据. 所以建表的时候 只能是tinyi ...
- Android xUtils3源代码解析之网络模块
本文已授权微信公众号<非著名程序猿>原创首发,转载请务必注明出处. xUtils3源代码解析系列 一. Android xUtils3源代码解析之网络模块 二. Android xUtil ...
- Unity3d中默认函数调用顺序(MonoBehaviour)
首先要明确的是MonoBehaviour是每个脚本的基类.每个Javascript脚本自动继承MonoBehaviour.使用C#或Boo时,需要显式继承MonoBehaviour. ...
- 20、uwp打包失败(All app package manifests in a bundle must declare the same values under the XPath *[local-name()='Package']/*[local-name()='Dependencies'])
在给 uwp工程打商店包的时候,遇到了一个异常: Error info: error 80080204: All app package manifests in a bundle must decl ...
- 【delphi】delphi操作sqlite3
SQLite SQLite是一个老牌的轻量级别的本地文件数据库,完全免费且开源,不需要安装,无须任何配置,当然,这样管理功能就不是很强大了,但是它的主要应用也是在本地数据库,可以说是最简单好用的嵌入式 ...