1
我想创建一个类似的类和索引定义到该索引如下图所示:在RavenDB指数从集合检索特定类型的项目的总和
public class Foo
{
public string Tag { get; set; }
public List<Bar> Bars { get; set; }
}
public abstract class Bar
{
public int Weight { get; set; }
}
public class IronBar : Bar { }
public class ChocolateBar : Bar { }
public class TagSummary
{
public string Tag { get; set; }
public int Count { get; set; }
public int TotalChocolateBarWeight { get; set; }
public int TotalIronBarWeight { get; set; }
}
public class TagSummaryIndex : AbstractIndexCreationTask<Foo, TagSummary>
{
public TagSummaryIndex()
{
Map = foos => from f in foos
select new
{
Tag = f.Tag,
Count = 1,
TotalChocolateBarWeight = f.Bars.OfType<ChocolateBar>().Sum(x=> x.Weight),
TotalIronBarWeight = f.Bars.OfType<IronBar>().Sum(x=> x.Weight)
};
Reduce = results => from r in results
group r by r.Tag into g
select new
{
Tag = g.Key,
Count = g.Sum(x => x.Count),
TotalChocolateBarWeight = g.Sum(x => x.TotalChocolateBarWeight),
TotalIronBarWeight = g.Sum(x => x.TotalIronBarWeight)
};
}
}
然而,当我尝试创建索引
IndexCreation.CreateIndexes(this.GetType().Assembly, _documentStore);
它引发InvalidOperationException。如果我从Map
中删除.OfType<T>()
部件,那么一切都很好(但不是我想要的)。我试过使用Where(x => x is ChocolateBar)
和各种其他类型的检查选项,但无济于事。
我该如何去实现这一目标?
感谢
感谢马特,是的,这对我来说是一个方便的功能。我会暂时预先计算它们。 – 2013-04-06 08:12:35