3

ここで完全に間違ったツリーを吠えているかもしれませんが... RavenPerson 型のオブジェクトがたくさん格納された RavenDB があります。

各 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);

例外が発生します

タイプ「IntegraRenewalMailLibrary.RavenPerson」のオブジェクトをタイプ「RenewalLogs.Models.PersonMailingModel」にキャストできません。

前もって感謝します!


更新: 以下のようにインデックスへの呼び出しを変更しても、例外は解決されません

        var mailings = DocumentSession.Query<PersonMailingModel, MvcApplication.MailingsByDate>()
                                      .Where(pmm => pmm.MailingDate == date.Value)
                                      .As<PersonMailingModel>()
                                      .ToList();

Update to Update: テスト ケースの例を含むビジュアル スタジオ ソリューションを作成しました: https://github.com/pauldambra/IndexExploration

バージョン 1.0.888 を使用

私は間違いなくインデックスで何が起こっているのか頭を悩ませていないので、これは私が正しくやっていないか、間違ったことをしようとしていると推測しています...


Ayende は、SelectMany を呼び出してインデックスを呼び出し、それを linq クエリ フォームを使用した呼び出しに置き換えるという解決策を Twitter で教えてくれました。

    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
                                       };

        }
    }
4

1 に答える 1

1

この呼び出しの最後に As() を呼び出します

于 2012-05-19T02:04:43.583 に答える