public async Task BuildAsync <T>(QueryBuilderContext <T> ctx) where T : class, new()
        {
            var searchQuery = ctx.GetSourceAs <ISearchQuery>();

            if (searchQuery == null)
            {
                return;
            }

            if (!String.IsNullOrEmpty(searchQuery.Criteria))
            {
                ctx.Query &= await _parser.BuildQueryAsync(searchQuery.Criteria, ctx).AnyContext();
            }

            if (!String.IsNullOrEmpty(searchQuery.Filter))
            {
                ctx.Filter &= await _parser.BuildFilterAsync(searchQuery.Filter, ctx).AnyContext();
            }

            if (!String.IsNullOrEmpty(searchQuery.Sort))
            {
                ctx.Search.Sort(await _parser.BuildSortAsync(searchQuery.Sort, ctx).AnyContext());
            }
        }