Ignorer les accents dans SQL Server en utilisant LINQ to SQL

Comment puis-je ignorer les accents (comme , `, ~) dans les requêtes faites à une base de données SQL Server en utilisant LINQ à SQL?

mise à jour:

N'a toujours pas trouvé comment le faire dans LINQ (ou même si c'est possible) mais j'ai réussi à changer la base de données pour résoudre ce problème. J'ai juste eu à changer la collation sur les champs que je voulais chercher. La collation que j'avais était:

SQL_Latin1_General_CP1_CI_AS

the city for" Case Insensible" et "Accents". Il suffisait de changer le AS en AI pour le rendre "insensible à L'Accent". La déclaration SQL est la suivante:

ALTER TABLE table_name ALTER COLUMN column_name column_type COLLATE collation_type
10
demandé sur Macmade 2008-11-27 01:50:05

4 réponses

dans les requêtes SQL (Sql Server 2000+, si je me souviens bien), vous faites ceci en faisant quelque chose comme select MyString, MyId à partir de MyTable où MyString collate Latin1_General_CI_AI ='aaaa'.

Je ne suis pas sûr que ce soit possible à Linq, mais quelqu'un de plus à L'aise avec Linq peut probablement traduire.

si vous êtes d'accord avec le tri et la sélection / où les requêtes ignorant toujours les accents, vous pouvez modifier la table pour spécifier la même collation sur le ou les champs avec lesquels vous êtes concerné.

2
répondu JasonTrue 2008-11-28 07:58:37

voir la réponse suivante:

LINQ Où Ignorer Accentuation et Cas

fondamentalement, vous devez modifier le type de champ dans SQL Server, par exemple

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

il ne semble pas y avoir de moyen de le faire en utilisant LINQ, à part appeler une méthode personnalisée pour supprimer les diacritiques (qui ne seraient pas performantes).

2
répondu Dunc 2017-05-23 12:06:49

LINQ à SQL n'a pas de fonctionnalité spécifique pour définir la collation utilisée pour une requête et il utilisera donc toujours la base de données par défaut.

1
répondu DamienG 2010-11-29 05:39:31

il semble qu'il y ait un moyen d'ignorer les différences de collation entre Linq et SQL en utilisant les fonctions 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

pour obtenir cette fonction dans linq à sql, il y a un commutateur pour SqlMetal: /functions. Exemple:

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

utilisez cette fonction dans Linq pour sql comme ceci:

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

ça m'a aidé, peut-être que quelqu'un trouve ça utile aussi.

1
répondu Jan 2012-02-01 14:16:06