Réalisation de comparaisons sensibles à la casse dans LINQ to Entities
Les requêtes LINQ to Entities, comme Thingies.First(t => t.Name == "ThingamaBob")
, peuvent ne pas être sensibles à la casse par défaut. Cela est dû au fait que LINQ to Entities traduit les expressions Lambda en SQL, où le respect de la casse repose sur les paramètres de classement de la base de données SQL Server.
Solution au niveau de la base de données : modification du classement
Le moyen le plus efficace de garantir des comparaisons sensibles à la casse est de modifier le classement de la colonne en une option sensible à la casse. Par exemple, pour rendre la colonne Name
de la table Thingies
sensible à la casse, utilisez cette commande SQL :
ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS
Approche côté client : utilisation de LINQ to Objects
Si la modification du classement de la base de données n'est pas réalisable, une solution côté client utilisant LINQ to Objects fournit une alternative. Cela implique une requête initiale dans la base de données suivie d'une comparaison en mémoire à l'aide de AsEnumerable()
. Exemple :
Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");
Cela effectue la vérification en mémoire sensible à la casse après le filtrage initial de la base de données. Notez que cette méthode peut être moins performante que le changement de classement côté serveur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!