我可能在这里咆哮完全错误的树但是......我有一个 RavenDB,其中存储了很多 RavenPerson 类型的对象。
每个 RavenPerson 都有一个邮寄机构列表,每个邮件机构都有一个相关联的日期。
{
"Bodies": [
{
"RenewalRunDate": "2011-11-30T00:00:00.0000000+00:00",
"BodyText": "A bunch of text"
}
]
}
我想获取给定的日期并获取此人的 ID 和相关正文文本的列表。
所以...
public class MailingsByDate : AbstractIndexCreationTask<RavenPerson, PersonMailingModel>
{
public MailingsByDate()
{
Map = people =>
people.SelectMany(person => person.Bodies,
(person, body) =>
new PersonMailingModel
{
MembershipNumber = person.MembershipNumber,
MailingBody = body.BodyText,
MailingDate = body.RenewalRunDate
});
}
}
但是当我调用它的时候
var mailings = DocumentSession.Query<PersonMailingModel, MvcApplication.MailingsByDate>()
.Where(pmm => pmm.MailingDate == date.Value);
我得到一个异常
Unable to cast object of type 'IntegraRenewalMailLibrary.RavenPerson' to type 'RenewalLogs.Models.PersonMailingModel'.
提前致谢!
更新: 如下所示更改对索引的调用不会解决异常
var mailings = DocumentSession.Query<PersonMailingModel, MvcApplication.MailingsByDate>()
.Where(pmm => pmm.MailingDate == date.Value)
.As<PersonMailingModel>()
.ToList();
更新更新: 我在这里创建了一个带有示例测试用例的 visual studio 解决方案:https://github.com/pauldambra/IndexExploration
使用版本 1.0.888
我绝对没有完全了解索引中发生的事情,所以我猜这是我没有做对或试图做错事......
Ayende 向我指出了 Twitter 上的解决方案,即使用 SelectMany 调用索引并将其替换为使用 linq 查询表单的调用
public class RecipientsByDate : AbstractIndexCreationTask<Person, PersonMailing>
{
public RecipientsByDate()
{
Map = people => from person in people
from body in person.Bodies
select new PersonMailing
{
MembershipNumber = person.MembershipNumber,
MailingBody = body.BodyText,
MailingDate = body.MailingDate
};
}
}
最佳答案
在此调用结束时调用 As()
关于c# - 如何在 RavenDB 中为嵌套日期建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660670/