为什么我在RavenDB索引查询中出现此错误:字段“CustomerId”未编入索引

时间:2012-02-05 14:03:31

标签: indexing ravendb

这是我的索引代码:

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'未编入索引,    无法查询未在...索引的字段

1 个答案:

答案 0 :(得分:9)

查看您的索引:

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

您编入索引的字段是DueDate,DebtorId和Amount,就是它。

如果你这样,就像这样:

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

它会起作用