Нечувствительная к регистру строка соответствует linq-to-sql и linq к объектам

см. также Различия между LINQ к Объектам и LINQ к SQL-запросам

Мы используем некоторые запросы по нашей базе данных и нашему в объектах памяти.

Что такое лучший способ сделать нечувствительная строка, соответствуют linq-to-sql так, чтобы?

  • Это работает быстро на SQL Server
  • То же выражение запроса может использоваться с linq к объектам для получения того же результата

Используя

a.ToLowerInvariant() == b.ToLowerInvariant()

по крайней мере, получает те же результаты, но это не становится обработанным на SQL-сервере насколько я могу сказать, так может быть намного медленнее затем

a == b

8
задан Community 23 May 2017 в 11:50
поделиться

3 ответа

Я не эксперт по linq to sql, но вы можете просто использовать метод ToUpperInvariant () строки перед сравнением.

0
ответ дан 5 December 2019 в 20:15
поделиться

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

В параметре сопоставления SQL_Latin1_General_CP1_CI_AS - CI означает нечувствительность к регистру, а AS означает чувствительность к акценту.

К сожалению, Linq-to-Sql игнорирует дополнительные параметры String.Compare () , поэтому вы не сможете явно установить чувствительность к регистру для сравнения. Однако он будет работать с linq to objects.

Если вы используете сортировку с учетом регистра, вы можете использовать что-то вроде SqlMethods.Like (field, "string") , чтобы использовать запрос LIKE - который нечувствителен к регистру - но это не переводит в linq к объектам.

7
ответ дан 5 December 2019 в 20:15
поделиться

Вот список поддерживаемых строковых операций в LINQ to SQL, которые, очевидно, будут работать и в LINQ to objects: http://msdn.microsoft.com/en-us/library/bb882672.aspx

Лично я не оценивал каждую из них на производительность, но ToLower и ToUpper не поддерживаются в LINQ to SQL, поэтому кажется, что Compare - хороший кандидат. Вы можете изучить транслированный SQL с помощью такого инструмента, как LINQPad, который имеет бесплатную версию и транслирует запрос в SQL базы данных, а также посмотреть, как он работает в БД.

Кроме того, LINQ to Objects, вероятно, отличается, поэтому то, что хорошо для одного, может не подойти для другого...

1
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: