см. также Различия между LINQ к Объектам и LINQ к SQL-запросам
Мы используем некоторые запросы по нашей базе данных и нашему в объектах памяти.
Что такое лучший способ сделать нечувствительная строка, соответствуют linq-to-sql так, чтобы?
Используя
a.ToLowerInvariant() == b.ToLowerInvariant()
по крайней мере, получает те же результаты, но это не становится обработанным на SQL-сервере насколько я могу сказать, так может быть намного медленнее затем
a == b
Я не эксперт по linq to sql, но вы можете просто использовать метод ToUpperInvariant () строки перед сравнением.
Чувствительность к регистру в базе данных SQL определяется настройкой сопоставления. По умолчанию, я думаю, что большинство баз данных нечувствительны к регистру, поэтому вы должны проверить, действительно ли вам нужно явно обрабатывать регистр.
В параметре сопоставления SQL_Latin1_General_CP1_CI_AS
- CI означает нечувствительность к регистру, а AS означает чувствительность к акценту.
К сожалению, Linq-to-Sql игнорирует дополнительные параметры String.Compare ()
, поэтому вы не сможете явно установить чувствительность к регистру для сравнения. Однако он будет работать с linq to objects.
Если вы используете сортировку с учетом регистра, вы можете использовать что-то вроде SqlMethods.Like (field, "string")
, чтобы использовать запрос LIKE - который нечувствителен к регистру - но это не переводит в linq к объектам.
Вот список поддерживаемых строковых операций в 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, вероятно, отличается, поэтому то, что хорошо для одного, может не подойти для другого...