我在RavenDB中有一个包含子集合的文档。子集合包含以下基本类型。
public class Section
{
public string BackgroundColor { get; set; }
public string Description { get; set; }
public string DesktopBackgroundImageUrl { get; set; }
public DateTime? EndDate { get; set; }
public string MobileBackgroundImageUrl { get; set; }
public int SortOrder { get; set; }
public DateTime? StartDate { get; set; }
public string TextColor { get; set; }
public string Title { get; set; }
public SectionType Type { get; set; }
}
这种类型有一些派生类,其中一个就是这个。
public class OfferSection : Section
{
public IEnumerable<Merchant> Merchants { get; set; }
}
我遇到的问题是我需要查询这个子集合并获取包含派生类型的文档,然后查询它的值。
这是我到目前为止所处的位置,但是因为它使用的是基类型,Merchants
属性不存在
public class Hubs_ByMerchantId : AbstractIndexCreationTask<Hub>
{
public Hubs_ByMerchantId()
{
Map = hubs => from hub in hubs
select new
{
Sections_Merchants_Id = hub.Sections.Where(x => x.Type == SectionType.Offer).SelectMany(x => x.Merchants.Select(y => y.Id))
};
}
}
有人能指出我正确的方向吗?
由于
答案 0 :(得分:0)
您可以使用.OfType<Type>
获取您想要的内容:
hub.Sections.OfType<OfferSection>().SelectMany(x => x.Merchants.Select(y => y.Id));
答案 1 :(得分:0)
在让我开始工作的方式有些混乱之后,将它放入选择中。这很有效,因为我们已经有一个针对该部分保存的类型枚举,因此很容易进行转换。
public class Hubs_ByMerchantId : AbstractIndexCreationTask<Hub>
{
public Hubs_ByMerchantId()
{
Map = hubs => hubs.SelectMany(x => (IEnumerable<OfferSection>)x.Sections).Where(x => x.Type == SectionType.Offer).Select(x => new
{
Sections_Merchants_Id = x.Merchants.Select(y => y.Id)
});
}
}
这可能不是最好的解决方案,但它是唯一有效的方法