Поиск имен в базе данных, которые соответствуют целым параметрам или любой части параметров - PullRequest
1 голос
/ 13 мая 2011

C # или VB.NET приветствуются.

Я пишу запрос, чтобы выбрать все записи, которые имеют какую-либо часть параметра.

У меня есть одна таблица под названием «Сотрудники». У некоторых людей есть такие имена: Джон Дэвид Кларк

Если параметр

  • "Джон"
  • "Джон Давид"
  • "Дэвид Джон"
  • "Джон Кларк"
  • "Кларк Джон"

Я смогу получить результат обратно, если в параметрах есть совпадение.

Если я использую Function Contains (q.FirstName & "" & q.LastName) .Contains (employeeName), я не верну никаких результатов, если employeeName имеет значение "John Clark" Функция Contains ищет только следующие слова слева направо. Он не соответствует ни одному слову за раз.

Так вот почему я использовал это в Linq to SQL:

        Dim employeeName As String
        query = From q In db.Employees _
                Where (q.FirstName & " " & q.LastName).Split(CChar(" ")).Intersect(employeeName.Split(CChar(" "))).Any _
                Select q

Я получил следующую ошибку:

Локальная последовательность не может использоваться в реализации операторов запросов LINQ to SQL, кроме оператора Contains ()

Есть ли другой способ запросить FirstName и LastName, которые имеют какую-либо часть параметра?

1 Ответ

0 голосов
/ 13 мая 2011

Это найдет тех сотрудников, чьи имена и фамилии соответствуют строке поиска:

        var searchText = "John David Clark";
        var tokens = searchText.Split(null);

        var result = db.Employees
            .Where(arg => tokens.Contains(arg.FirstName) && tokens.Contains(arg.LastName))
            .Select(arg => new { arg.LastName, arg.FirstName })
            .ToList();

Это найдет тех сотрудников, чья фамилия или имя соответствуют любому имени в строке поиска:

        var searchText = "John David Clark";
        var tokens = searchText.Split(null);

        var result = db.Employees
            .Where(arg => tokens.Contains(arg.FirstName) || tokens.Contains(arg.LastName))
            .Select(arg => new { arg.LastName, arg.FirstName })
            .ToList();
...