如果我在RavenDB中有一个静态索引,如下所示:
public class TestIndex : AbstractIndexCreationTask<CardApplication>
{
public TestIndex()
{
Map = apps =>
from app in apps
select new { State = app.State, };
Sort(c => c.State, Raven.Abstractions.Indexing.SortOptions.String);
}
}
然后我尝试使用以下方法查询:
session.Query<CardApplication, TestIndex>()
.OrderBy(c => c.State)
.Select(c => new { c.State, c.IdentityDetails.Applicant.FirstName, })
.ToList();
我将结果返回到设置State属性的位置,但FirstName属性都为null。
当我查看RavenDB通过网络发送的HTTP请求时,我发现它正在使用查询字符串参数:fetch=IdentityDetails_Applicant_FirstName
。如果我将其修改为fetch=IdentityDetails.Applicant.FirstName
并重新发出请求,我会得到正确的结果(至少在返回的JSON中我可以看到FirstName结果)。
如果我使用动态索引进行类似的查询:
session.Query<CardApplication>()
.OrderBy(c => c.State)
.Select(c => new { c.State, c.IdentityDetails.Applicant.FirstName, })
.ToList();
我得到了正确的结果,我注意到RavenDB在HTTP请求中发送了正确的以点分隔的路径,而不是分开的下划线路径。
如何让这个嵌套对象投影与静态索引一起使用?
答案 0 :(得分:1)
您要求RavenDB从索引中获取属性,因此您需要实际指定该属性。 使用以下索引:
public class TestIndex : AbstractIndexCreationTask<CardApplication>
{
public TestIndex()
{
Map = apps =>
from app in apps
select new { State = app.State, IdentityDetails_Applicant_FirstName = app IdentityDetails.Applicant.FirstName};
Sort(c => c.State, Raven.Abstractions.Indexing.SortOptions.String);
Store("IdentityDetails_Applicant_FirstName", FieldStorage.Yes);
}
}