我创建了这个索引:
public class ReceiptsByClient : AbstractIndexCreationTask<Receipt>
{
public ReceiptsByClient()
{
Map = receipts => from r in receipts
let d = LoadDocument<Debtor>(r.Receipt_Debtor)
select new { ClientId = d.Debtor_Client };
}
}
现在我想查询这个索引,如下所示:
var rptQry = Session.Query<Receipt, ReceiptsByClient>()
当然我希望能够在Where子句中传递ClientId的值。但是,where子句的T是Receipt类型,并且不知道ReceiptsByClient中定义的匿名类型的ClientId。 如何使用我的ReceiptsByClient索引进行查询?
答案 0 :(得分:2)
Raven对几乎所有涉及匹配查询到索引的内容都做了Duck Typing。您需要的只是一个包含您要查询的字段的类型:
public class Foo
{
public string ClientId { get; set; }
}
然后在查询中使用它,然后使用As
对其进行反对,以便您的结果属于真正的类。
var q = session.Query<Foo, ReceiptsByClient>()
.Where(x=> x.ClientId == "clients/123")
.As<Receipt>();
请注意,ClientId
字段不会出现在结果中。如果你想这样做 - 你必须使用Store(x=> x.ClientId, FieldStorage.Yes)
将字段存储在索引中,然后在查询中使用AsProjection
来鸭子类型到包含所有字段的类。