gpt4 book ai didi

c# - RavenDB 使用 StartsWith 搜索多个术语中的每一个

转载 作者:太空狗 更新时间:2023-10-29 20:31:23 35 4
gpt4 key购买 nike

当术语在编译时未知时,是否有推荐的方法使用 StartsWith 搜索多个术语中的每一个?

我设想的是这样的:

var searchTerms = "John Doe".Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var query = session.Query<Person, PersonIndex>()
.Where(x => x.FirstName.StartsWithAnyOf(searchTerms) ||
x.LastName.StartsWithAnyOf(searchTerms));

查询相当于:

var query = session.Query<Person, PersonIndex>()
.Where(x => x.FirstName.Starts(searchTerms[0]) ||
x.LastName.StartsWith(searchTerms[0]) ||
x.FirstName.Starts(searchTerms[1]) ||
x.LastName.StartsWith(searchTerms[1]));

答案是在运行时构建 LINQ 查询(PredicateBuilder 或类似工具)吗?

最佳答案

使用 LuceneQuery(可能需要使用子句,具体取决于您正在做的其他事情):

var searchTerms = "John Doe".Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

var query = session.Advanced.LuceneQuery<Person, PersonIndex>();
query = query.OpenSubclause(); // optional

foreach (var term in terms)
{
query = query.WhereStartsWith("FirstName"), term).OrElse();
query = query.WhereStartsWith("LastName"), term).OrElse();
}

query = query.WhereEquals("Id", null);
query = query.CloseSubclause(); // if OpenSubclause() was used

如果您想要强类型变量名,请查看此答案:https://stackoverflow.com/a/301957/941536

关于c# - RavenDB 使用 StartsWith 搜索多个术语中的每一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207932/

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