Linq to SQL Содержит при поиске по имени

Я ищу базу данных SQL 2005, в которой есть столбец полного имени. Я хочу иметь возможность сверяться с этим столбцом и упорядочивать результаты в соответствии с их релевантностью.

Я использую хорошую систему заказов, которую я нашел на SO, но, к сожалению, она не работает так, как мне хотелось бы, и, похоже, это связано с несоответствием функциональности «содержит».

Вот код:

 private static int QueryOrder(string query, string name)
{
    if (name == query)
        return -1;
    if (name.Contains(query))
        return 0;

    return 1;
}

Теперь проблема в том, что это не работает в следующем сценарии:

Данные столбца полного имени базы данных: Joey JoeJoe Junior Shabbadoo

Поисковый запрос: Джоуи Шаббаду

Метод queryorder не соответствует «содержит», поскольку он не видит поле полного имени как содержащее текст запроса.

Затем я упорядочиваю результаты следующим образом.

 peopleList = peopleList.OrderBy(p => QueryOrder(fullName, p.FullName)).ToList();

Итак, есть ли способ сделать это с помощью LINQ или мне просто нужно пройти по маршруту sproc?


person Full Time Skeleton    schedule 06.05.2015    source источник
comment
Вы могли бы разделить поисковый запрос на пространство и сделать проверку для обеих частей?   -  person Thewads    schedule 06.05.2015
comment
Я обновил вопрос, добавив немного больше деталей. Я думал о разделении, но я не уверен, как я буду упорядочивать результаты.   -  person Full Time Skeleton    schedule 06.05.2015


Ответы (1)


LINQ прав. "Джоуи Шаббадо" не соответствует contained в строке поиска. Чтобы contains возвращал true, полная последовательность символов должна совпадать с одной полной последовательностью в другой строке.

В зависимости от того, что вы определяете как «совпадения», вы можете обратиться к регулярным выражениям и попробовать (1) разделить запрос, а затем сопоставить его с \AJoey.+Shabbadoo\z с помощью регулярного выражения.

person Mario The Spoon    schedule 06.05.2015
comment
Я не говорю, что LINQ неверен, просто функциональность contains не работает в моем сценарии. - person Full Time Skeleton; 06.05.2015
comment
Раньше я использовал регулярное выражение, но не для чего-то подобного. Буду выяснять, насколько он подходит. - person Full Time Skeleton; 06.05.2015