Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RavenDB使用StartsWith搜索多个术语中的每个术语_C#_Linq_Ravendb - Fatal编程技术网

C# RavenDB使用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

当编译时不知道术语时,是否有推荐的方法使用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 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