Как построить внутреннюю поисковую систему? - PullRequest
0 голосов
/ 01 августа 2011

Я ищу способ создать внутреннюю поисковую систему, которая будет искать транзакции в зависимости от критериев.У меня проблема в том, что больше критериев означает больше проверок ... поэтому, если есть 6 критериев ... мне почти нужно сделать 6 x 6 = 36 ELSE в выражении IF.Это огромное ... я уверен, что есть какой-то другой способ сделать это.

Объяснение: Если у меня есть объект, у которого есть A, B, C, D, E, F, я должен проверить, если

A,B,C,D,E NOT F
A,B,C,D, NOT E, F
A,B,C, NOT D, E, F
etc..

Так, как я мог справиться с этим?(Я использую C # с WPF)

РЕДАКТИРОВАТЬ: Здесь более подробно.

  • Это код, а не SQL.
  • Количество критериев, которые должны оцениваться, зависит от пользователя.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Способ сделать это - построить дерево выражений.Это может быть просто список объектов критериев.У каждого объекта есть метод «check», чтобы сказать, прошел ли элемент тест.Вы можете создать этот список во время выполнения, а затем использовать его для проверки каждого кандидата.

Или посмотрите на LINQ.Это идеально подходит.

0 голосов
/ 01 августа 2011

Я предполагаю, что вы создаете команду sql. Обычно мы просто помещаем серию операторов IF / CASE (по одному для каждого возможного параметра), которые бы добавляли SQL. Но в наши дни вы можете использовать LINQ:

var q = from c in Customers select c;

if(!String.IsNullOrEmpty(param.Name))
    q = q.Where(c => c.Name.Contains(param.Name));

if(param.CustID.HasValue)
    q = q.Where(c => c.ID == param.CustID);

if(!String.IsNullOrEmpty(param.CustAddr))
    q = q.Where(c => c.Addr.Contains(param.CustAddr));

//use your results!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...