C# 如何编写索引以获取RavenDB中跨文档的集合中的对象总数?
我将以下对象保存为数据库中的文档:C# 如何编写索引以获取RavenDB中跨文档的集合中的对象总数?,c#,ravendb,C#,Ravendb,我将以下对象保存为数据库中的文档: public class ClientContactsModel { public ClientContactsModel() { Contacts = new List<ContactItem>(); } public Guid Id { get; set; } public Guid ClientId { get; set; } public List<ContactIte
public class ClientContactsModel
{
public ClientContactsModel()
{
Contacts = new List<ContactItem>();
}
public Guid Id { get; set; }
public Guid ClientId { get; set; }
public List<ContactItem> Contacts { get; set; }
}
公共类客户端联系人模型
{
公共客户端联系人模型()
{
联系人=新列表();
}
公共Guid Id{get;set;}
公共Guid客户端ID{get;set;}
公共列表联系人{get;set;}
}
如何编写一个索引来计算每个ClientContactsModel对象中的联系人数量,以获得联系人总数?我能够计算出这一个:
public class Contacts_GetCount: AbstractIndexCreationTask<ClientContactsModel, Contacts_GetCount.ContactResult>
{
public class ContactResult
{
public Guid ClientId { get; set; }
public int Total { get; set; }
}
public Contacts_GetCount()
{
Map = contacts => from contact in contacts
select new {
ClientId = contact.ClientId,
Total = contact.Contacts.Count
};
Reduce = results => from result in results
group result by result.ClientId
into g
select new {
ClientId = g.Key,
Total = g.Sum(x=>x.Total)
};
}
}
公共类联系人\u GetCount:AbstractIndexCreationTask
{
公共类ContactResult
{
公共Guid客户端ID{get;set;}
公共整数总计{get;set;}
}
公共联系人_GetCount()
{
映射=联系人=>来自联系人中的联系人
选择新的{
ClientId=contact.ClientId,
总计=contact.Contacts.Count
};
Reduce=results=>from result in results
按result.ClientId对结果进行分组
进入g
选择新的{
ClientId=g.键,
总计=g.Sum(x=>x.Total)
};
}
}
我缺少的部分是在文档映射中创建的匿名类型中输入集合的计数。是否只需要联系人的总数?是每个客户,全球范围内吗?正确。我需要每个客户端的联系人总数。答案是理想的SelectMany,这还不受支持,但作为替代方案,RavenDB建议使用Map/Reduce索引。我自己仍在努力,一旦我有了解决方案,我会很乐意与大家分享。你正在运行什么版本的RavenDB?我提到的解决方案只适用于2.5及以上版本。