2012-02-05 4 views
4

をインデックス化されていませんこれは私のインデックスコードです:はなぜRavenDBインデックスクエリでこのエラーが出るん:フィールド「のCustomerId」が

public class InvoiceSummaryView 
{ 
    public DateTime DueDate { get; set; } 
    public string CompanyAddress { get; set; } 
    public string DebtorName { get; set; } 
    public float Amount { get; set; } 
    public bool IsPaid { get; set; } 
    public string CustomerId { get; set; } 
} 

public class InvoiceSummaryIndex : AbstractIndexCreationTask<CustomerInvoice> 
{ 
    public InvoiceSummaryIndex() 
    { 

     Map = invoices => from invoice in invoices 
          select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount }; 

     TransformResults = (database, results) => 
      from invoice in results 
      let debtor = database.Load<Debtor>(invoice.DebtorId) 
      let company = database.Load<Company>(debtor.CompanyId)    
      select new { 
       DueDate = invoice.DueDate, 
       CompanyAddress = Company.Address.ToString(), 
       DebtorName = debtor.Contact.First + " " + debtor.Contact.Last, 
       Amount = invoice.Amount, 
       IsPaid = invoice.IsPaid, 
       CustomerId = Company.CustomerId 
      }; 

    } 
} 

そして、これは私のクエリです:

var query = from viewItem in session.Query<InvoiceSummaryView>("InvoiceSummaryIndex") 
         where viewItem.CustomerId == id 
         orderby viewItem.DueDate 
         select viewItem; 

エラーは次のとおりです。

「エラー」:「System.ArgumentExceptionの:フィールド 『のCustomerId』がインデックス化されていない、 がで索引付けされていないフィールドに照会することはできません...

答えて

8

あなたのインデックスを見てみましょう。

select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount }; 

あなたがインデックスされているフィールドは、それはそれで、DueDate、DebtorId及び金額です。

あなたはそれがこのようにそれます場合:それは私の最初の印象は、平らなテーブルには、変換を含め、最終的な指数結果のためのバックグラウンドで生成されたた

+0

動作します

select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount, invoice.CustomerId }; 

。あなたがそれを表現する方法は、そのテーブルがインデックスであり、変換がその場で行われるように思えます。そうですか?それはつまり、私がエンティティの4つのレベルのヒイラキーを持っていて、それらのいずれかを照会した場合、その子は親のIDであり、それは親の親のIDなどである必要がありますか? –

+0

そして、それはインデックスを作成しますが、結果は返されません.Raven Studioのインデックスを見て、文字列をfloatに変換するインデックスエラーがあります。 RSに表示されたインデックスは、Amount:Amount =((float)invoice.Amount)をキャストするようにコンパイルされています。 –

+0

アイドル、あなたはマップの出力でしか照会できません(またはそこにある場合は減らします)、TransformResultsはオンザフライで実行されます。はい。 –

関連する問題