C# RavenDB使用StartsWith搜索多个术语中的每个术语
当编译时不知道术语时,是否有推荐的方法使用StartsWith搜索多个术语中的每一个 我的设想是这样的:C# RavenDB使用StartsWith搜索多个术语中的每个术语,c#,linq,ravendb,C#,Linq,Ravendb,当编译时不知道术语时,是否有推荐的方法使用StartsWith搜索多个术语中的每一个 我的设想是这样的: var searchTerms = "John Doe".Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var query = session.Query<Person, PersonIndex>() .Where(x => x.FirstName.Starts
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 searchTerms=“John Doe”.Split(新[]{''},StringSplitOptions.removemptyEntries);
var query=session.query()
.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]));
var query=session.query()
.Where(x=>x.FirstName.start(searchTerms[0])||
x、 LastName.StartsWith(搜索术语[0])||
x、 FirstName.start(searchTerms[1])||
x、 StartsWith(searchTerms[1]);
在运行时构建LINQ查询的答案是什么(PredicateBuilder或类似工具)?您正在尝试做什么? 您最好使用分析字段,然后使用LuceneQuery发出
.Search
而不是.Where
(可能需要使用子类,具体取决于您正在执行的其他操作):
var searchTerms=“John Doe”.Split(新[]{''},StringSplitOptions.removemptyEntries);
var query=session.Advanced.LuceneQuery();
query=query.opensubcuse();//可选择的
foreach(var术语)
{
query=query.WhereStartsWith(“FirstName”),term.OrElse();
query=query.WhereStartsWith(“LastName”),term.OrElse();
}
query=query.WhereEquals(“Id”,null);
query=query.closeSubcuse();//如果使用了opensubcluse()
如果您想要强类型变量名,请检查以下答案:我不认为
.Search
会执行我想要的操作,我想在搜索字符串为Jo,do,Jo Doe,Jo do时返回John Doe。我不认为.Search
会返回John Doe,除非我匹配其中一个分析的术语?我只是想澄清一下,我的意思是当搜索字符串是。
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