考虑 RavenDB 查询中可能的空参数
accounting for possible empty parameter in RavenDB query
我有一个查询,其参数可能为空也可能不为空。如果它是空的,那么我希望返回所有结果,如果它不为空,那么搜索应该包括该搜索词。我让它工作的唯一方法是使用 if 语句,但是有没有办法让它在一个查询语句中工作?
这是我目前的情况:
IList<FixturesIndex.Match> matches;
if (input.TeamId != "")
{
matches = documentSession
.Query<FixturesIndex.Match, FixturesIndex>()
.Search(x => x.ParticpantOneTeamId, input.TeamId)
.Search(x => x.ParticpantTwoTeamId, input.TeamId)
.Where(x => x.CommunityId == input.RavenId)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>()
.ToList()
.Take(10)
.ToList();
}
else
{
matches = documentSession
.Query<FixturesIndex.Match, FixturesIndex>()
.Where(x => x.CommunityId == input.RavenId)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>()
.ToList()
.Take(10)
.ToList();
}
我认为 .Search 不可能。
如果问题是代码重复,您可以使用 if 仅将 .Search 添加到查询中:
IList<FixturesIndex.Match> matches;
var query = documentSession.Query<FixturesIndex.Match, FixturesIndex>();
if (input.TeamId != "")
{
query = query
.Search(x => x.ParticpantOneTeamId, input.TeamId)
.Search(x => x.ParticpantTwoTeamId, input.TeamId);
}
query = query
.Where(x => x.CommunityId == input.RavenId)
.Take(10)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>();
matches = query.ToList();
请注意,当您调用 .ToList() 时执行查询,在您的版本中,第一个 .ToList() 从数据库中检索 "all" 条记录,之后您只获取 10 条记录。
我有一个查询,其参数可能为空也可能不为空。如果它是空的,那么我希望返回所有结果,如果它不为空,那么搜索应该包括该搜索词。我让它工作的唯一方法是使用 if 语句,但是有没有办法让它在一个查询语句中工作?
这是我目前的情况:
IList<FixturesIndex.Match> matches;
if (input.TeamId != "")
{
matches = documentSession
.Query<FixturesIndex.Match, FixturesIndex>()
.Search(x => x.ParticpantOneTeamId, input.TeamId)
.Search(x => x.ParticpantTwoTeamId, input.TeamId)
.Where(x => x.CommunityId == input.RavenId)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>()
.ToList()
.Take(10)
.ToList();
}
else
{
matches = documentSession
.Query<FixturesIndex.Match, FixturesIndex>()
.Where(x => x.CommunityId == input.RavenId)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>()
.ToList()
.Take(10)
.ToList();
}
我认为 .Search 不可能。
如果问题是代码重复,您可以使用 if 仅将 .Search 添加到查询中:
IList<FixturesIndex.Match> matches;
var query = documentSession.Query<FixturesIndex.Match, FixturesIndex>();
if (input.TeamId != "")
{
query = query
.Search(x => x.ParticpantOneTeamId, input.TeamId)
.Search(x => x.ParticpantTwoTeamId, input.TeamId);
}
query = query
.Where(x => x.CommunityId == input.RavenId)
.Take(10)
.ProjectFromIndexFieldsInto<FixturesIndex.Match>();
matches = query.ToList();
请注意,当您调用 .ToList() 时执行查询,在您的版本中,第一个 .ToList() 从数据库中检索 "all" 条记录,之后您只获取 10 条记录。