Comparaison insensible à la casse dans LINQ to Entities
Contrairement à LINQ to Objects, LINQ to Entities ne prend pas directement en charge les comparaisons sensibles à la casse. En effet, LINQ to Entities convertit les expressions Lambda en instructions SQL, qui sont finalement exécutées par la base de données (telle que SQL Server). Par défaut, SQL Server utilise un classement insensible à la casse, ce qui signifie que la requête suivante renverra toujours une correspondance quelle que soit la casse :
<code>context.Thingies.First(t => t.Name == "ThingamaBob");</code>
Solution côté serveur
Pour implémenter une comparaison sensible à la casse dans LINQ to Entities, le classement de la base de données des colonnes pertinentes doit être modifié. Par exemple, l'instruction SQL suivante modifie le classement de la colonne « Nom » dans la table « Thingies » pour qu'il soit sensible à la casse :
<code>ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS;</code>
Solution client
Bien qu'elle ne soit pas idéale, il existe une solution de contournement côté client qui exploite à la fois LINQ to Entities et LINQ to Objects :
<code>var result = context.Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");</code>
Dans cette approche, AsEnumerable()
convertit la requête en une énumération en mémoire, vous permettant d'effectuer une comparaison secondaire sensible à la casse à l'aide de Where()
. Toutefois, cette solution de contournement introduit des requêtes supplémentaires dans la base de données.
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!