Linq с несколькими содержит

1

В нашем пользовательском интерфейсе пользователи могут бесплатно отправлять текст, который применяется к нескольким полям.

            q = q.Where(p => p.Account.Contains(query)
                             || p.AccountName.Contains(query)
                             || p.AccountAKA.Contains(query)
                             || p.AccountRef.Contains(query));

Это означает SQL. Есть ли более оптимальный способ опроса, поскольку это происходит медленно.

Есть около 20 000 строк. Размер диска базы данных не имеет значения, использование памяти.

  • 0
    Проблема в том, что LIKE %query% недостаточно эффективен. Проблему может решить индексация: blogs.msdn.com/b/varund/archive/2009/11/30/…
  • 0
    Единственное решение, которое я вижу, - это создать собственную таблицу индексации (индексировать все строки p.Account [x..y]). Но это требует много памяти. Сколько строк у вас в базе данных?
Показать ещё 1 комментарий
Теги:
sql-server
linq

2 ответа

1
Лучший ответ

Поскольку все это текстовые поля, каждое из значений преобразуется в Account LIKE '%'+ query+ '%'. Все запросы с подстановочными знаками с обеих сторон будут медленными, к сожалению, не так много, что можно сделать.

Может быть, можно использовать StartsWith() вместо Contains()? Это переведет "LIKE query +"%, который, как правило, намного быстрее?

1

Лучшим решением было бы изменить вашу модель данных и использовать столбец Description котором есть ВСЕ информация об имени учетной записи, чтобы вы могли сделать свой запрос в отношении одного столбца. Обновления к записи приводят к обновлению этого столбца Описание.

  • 0
    О, я согласен Но иногда ограничения не позволяют этого :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню