Хочу реализовать Advanced search на c# mvc

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023
FROM [dbo].[tb_data_trademark] tb1 
inner join [dbo].[tb_data_trademark_class] tb2  ON tb2.id_data = tb1.id
inner join [dbo].[tb_data_trademark_applicant] tb3  ON tb3.id_data = tb1.id
where (tb1.logo_text like '%'+@Full_name+'%' or @Full_name is null) and
      (tb1.logo_description like '%'+@logo_description+'%' or @logo_description is null) and
      (tb1.RegNum = @RegNum or @RegNum is null) and 
      (tb1.state_num like '%'+@state_num+'%' or @state_num is null) and 
      (tb1.wena_classification like '%'+@wena_classification+'%' or @wena_classification is null) and
      (tb1.register_date>=@date_from OR @date_from IS NULL) AND
      (tb1.register_date<=DATEADD(D, 1, @date_to) OR @date_to IS NULL) AND
      (tb2.class like '%'+@class+'%' or @class is null) and
      (tb3.FullName like '%'+@FullName+'%' or @FullName is null)

Хочу, чтобы при вводе в одном поле выходило несколько вариантов, т.е. Условно я записываю имена пользователей. "Тар Д Фед" и получать всех пользователей с подобными инициалами.

Например: Тарасов Денис Федорович, Тарасова Динара Федоровна и т.д.

Ответы

▲ 0

Можно расширить условие (tb3.FullName like '%'+@FullName+'%' or @FullName is null) так

(
    (tb3.FullName like '%'+@FullNamePart1+'%' or @FullNamePart1 is null)
and (tb3.FullName like '%'+@FullNamePart2+'%' or @FullNamePart2 is null)
and (tb3.FullName like '%'+@FullNamePart3+'%' or @FullNamePart3 is null)
and (tb3.FullName like '%'+@FullNamePart4+'%' or @FullNamePart4 is null)
)

Вашем примере параметры будут такие

@FullNamePart1='Тар'
@FullNamePart2='Д'
@FullNamePart3='Фед'
@FullNamePart3=null

Введенное значение "Тар Д Фед" поделите на части через string.split('Тар Д Фед',' ')
Конечно, такой поиск сильно расширит выборку. Если же хотите, чтобы первый слог 'Тар' относился только к поиску по фамилии, покажите, как будете выделять фамилию.
Ну или применять regexp или условия типа tb3.FullName like'%Тар%Д%Фед%'.