这是一个跟进问题:Accessing dictionary in TransformResults failing
鉴于以下类别:
public class Product
{
public string Id { get; set; }
public string Name { get; set; }
public SpecialType DefaultOffer { get; set; }
public Dictionary<SpecialType, string> Specials { get; set; }
}
public enum SpecialType
{
None = 0,
Something1,
Something2
}
我按如下方式创建索引:
public class ProductSummariesViaTransform : AbstractIndexCreationTask<Product>
{
public ProductSummariesViaTransform()
{
Map = products => from p in products
select new { p.Name };
TransformResults = (db, products) =>
from product in products
select new
{
Id = product.Id,
Name = product.Name,
SpecialOffer = product.Specials[product.DefaultOffer]
};
}
}
如果我使用.AsProjection<ProductSummary>()
使用此索引进行查询,则SpecialOffer始终为null,但Id和Name已正确填充。
但是,如果我将转换更改为显式加载文档(如下所示),则会按预期填充SpecialOffer。
TransformResults = (db, products) =>
from product in products
let p = db.Load<Product>(product.Id) // explicit load
select new
{
Id = product.Id,
Name = product.Name,
SpecialOffer = p.Specials[p.DefaultOffer] // use explicit doc
};
不考虑TransformResults是否是执行此操作的最佳方式,似乎无需在Transform中再次加载Product文档以便能够访问Specials
字典。
我的理解是基础文档始终可用于Transform。我错过了什么或者这是一个错误吗?
完整(通过)单元测试可在https://gist.github.com/4601829获得。
答案 0 :(得分:2)
AsProjection
更改传递给TransformResults的数据。
您需要我们As
或OfType
。