2012-05-18 65 views
3

我可能在這裏完全錯誤地調用了錯誤的樹,但是...我有一個RavenDB,其中存儲了許多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更新: 我已經創建了示例測試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 
             }; 

     } 
    } 

回答

1

電話爲()在

+0

我已經添加了這個通話結束時通過調用替換(我會更新以上,以確保我已經按預期完成了),並且它會拋出e同樣的錯誤... –

+0

將此標記爲Ayende提供的答案,因爲他實際上在Twitter上向我指出了正確的方向...... –