在RavenDB查询中计算可能的空参数

时间:2018-01-31 17:05:37

标签: ravendb

我的查询的参数可能为空,也可能不为空。如果它是空的,那么我希望返回所有结果,如果它不为空,则搜索应该包括该搜索项。我能让它工作的唯一方法是使用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();

            }

1 个答案:

答案 0 :(得分:2)

我认为.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()从数据库中检索“所有”记录,然后只记录10条记录。