gpt4 book ai didi

c# - 来自静态索引的 RavenDB 嵌套对象投影

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:04 26 4
gpt4 key购买 nike

如果我在 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 属性均为空。

当我查看 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 请求中发送了正确的点分隔路径,而不是断开的下划线分隔路径。

如何让这个嵌套对象投影与静态索引一起使用?

最佳答案

您要求 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);
}
}

关于c# - 来自静态索引的 RavenDB 嵌套对象投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com