这是一个后续问题:Accessing dictionary in TransformResults failed
给定以下类:
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 始终为空,尽管 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
字典。
我的理解是底层文档始终可用于转换。我错过了什么还是这是一个错误?
完整(通过)单元测试可在https://gist.github.com/4601829获得。