From 2386aa34cbd392a504a8ea76bd950daf83d2c195 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Mon, 4 May 2020 14:26:43 +0200 Subject: [PATCH] allow search in multiple fields --- zero.Core/Api/TranslationsApi.cs | 2 +- zero.Core/Entities/ListQuery.cs | 8 ++++++++ zero.Core/Extensions/RavenQueryableExtensions.cs | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/zero.Core/Api/TranslationsApi.cs b/zero.Core/Api/TranslationsApi.cs index 52a67ef6..6c0b820a 100644 --- a/zero.Core/Api/TranslationsApi.cs +++ b/zero.Core/Api/TranslationsApi.cs @@ -48,7 +48,7 @@ namespace zero.Core.Api /// public async Task> GetByQuery(string languageId, ListQuery query) { - query.SearchSelector = entity => entity.Key; + query.SearchFor(entity => entity.Key, entity => entity.Value); using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { diff --git a/zero.Core/Entities/ListQuery.cs b/zero.Core/Entities/ListQuery.cs index 7a65cc04..cb566c48 100644 --- a/zero.Core/Entities/ListQuery.cs +++ b/zero.Core/Entities/ListQuery.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System; +using System.Collections.Generic; using System.Linq.Expressions; namespace zero.Core.Entities @@ -15,6 +16,8 @@ namespace zero.Core.Entities public Expression> SearchSelector { get; set; } = null; + public Expression>[] SearchSelectors { get; private set; } = new Expression>[0] { }; + public string OrderBy { get; set; } = "createdDate"; public ListQueryOrderType OrderType { get; set; } = ListQueryOrderType.String; @@ -26,6 +29,11 @@ namespace zero.Core.Entities public int PageSize { get; set; } = 30; public TFilter Filter { get; set; } + + public void SearchFor(params Expression>[] selectors) + { + SearchSelectors = selectors; + } } diff --git a/zero.Core/Extensions/RavenQueryableExtensions.cs b/zero.Core/Extensions/RavenQueryableExtensions.cs index e79af731..81392057 100644 --- a/zero.Core/Extensions/RavenQueryableExtensions.cs +++ b/zero.Core/Extensions/RavenQueryableExtensions.cs @@ -44,6 +44,13 @@ namespace zero.Core.Extensions { rawQuery = rawQuery.SearchIf(query.SearchSelector, query.Search, "*", "*"); } + if (!query.Search.IsNullOrEmpty() && query.SearchSelectors.Length > 0) + { + foreach (var selector in query.SearchSelectors) + { + rawQuery = rawQuery.SearchIf(selector, query.Search, "*", "*", Raven.Client.Documents.Queries.SearchOperator.Or); + } + } if (!query.OrderBy.IsNullOrEmpty()) {