Игнорирование ударений в SQL Server с использованием LINQ to SQL - PullRequest
10 голосов
/ 27 ноября 2008

Как я могу игнорировать акценты (например, ´, `, ~) в запросах к базе данных SQL Server с использованием LINQ to SQL?

UPDATE:

До сих пор не выяснил, как это сделать в LINQ (или даже если это возможно), но мне удалось изменить базу данных, чтобы решить эту проблему. Просто нужно было изменить параметры сортировки полей, которые я хотел найти. У меня было сопоставление:

SQL_Latin1_General_CP1_CI_AS

CI обозначает «Нечувствительный к регистру» и AS как «Чувствительный к акценту». Просто нужно было изменить AS на AI, чтобы сделать его «нечувствительным к акценту». Оператор SQL выглядит так:

ALTER TABLE table_name ALTER COLUMN column_name column_type COLLATE collation_type

Ответы [ 4 ]

2 голосов
/ 16 ноября 2011

См. Следующий ответ:

LINQ, где игнорируются акцентуация и регистр

Как правило, вам нужно изменить тип поля в SQL Server, например,

ALTER TABLE People ALTER COLUMN Name [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AI

Кажется, что нет способа сделать это с помощью LINQ, кроме вызова пользовательского метода для удаления диакритических знаков (который не будет работать).

2 голосов
/ 27 ноября 2008

В запросах SQL (Sql Server 2000+, насколько я помню) вы делаете это, например, выбирая MyString, MyId из MyTable, где MyString сопоставляет Latin1_General_CI_AI = 'aaaa'.

Я не уверен, возможно ли это в Linq, но кто-то более уютный с Linq может перевести.

Если вы в порядке с сортировкой и выбираете / где запросы ВСЕГДА игнорируют акценты, вы можете изменить таблицу, чтобы указать те же параметры сортировки для полей, в которых вы заинтересованы.

1 голос
/ 01 февраля 2012

Кажется, что есть способ игнорировать различия в Linq для SQL с помощью функций t-sql:

CREATE FUNCTION [dbo].[func_ConcatWithoutCollation]
(
    @param1 varchar(2000),
    @param2 varchar(2000)
)
RETURNS varchar(4000)
AS
BEGIN
    IF (@param1 IS NULL) SET @param1 = ''
    IF (@param2 IS NULL) SET @param2 = ''
    RETURN @param1 COLLATE Latin1_General_CS_AS + @param2 COLLATE Latin1_General_CS_AS
END

чтобы получить эту функцию в linq to sql, есть переключатель для SqlMetal: / functions. Пример:

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\Bin\SqlMetal.exe" /server:. /database:NameOfDatabase /pluralize /code:ContextGenerated.cs /sprocs /views /functions

Используйте эту функцию в Linq to sql следующим образом:

from s in context.Services
where context.Func_ConcatWithoutCollation(s.Description, s.Email) == "whatever"
select s

Это помогло мне, может быть, кто-то тоже найдет это полезным.

1 голос
/ 29 ноября 2010

LINQ to SQL не имеет каких-либо специальных функций для настройки параметров сортировки, используемых для запроса, поэтому всегда будет использовать базу данных по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...