linq insensible à la casse (sans toUpper ou toLower)
public Articles GetByName(string name, Categories category, Companies company)
{
var query = from article in session.Linq<Articles>()
where article.Name == name &&
article.Category == category &&
article.Company == company
select article;
return query.FirstOrDefault();
}
comment pouvez interroger être sensible à la casse. Je peux utiliser toLower ou toUpper mais je veux avec OrdinalIgnoreCase. Est-il possible?
- Double Possible de LINQ Contient pas sensible à la casse
Vous devez vous connecter pour publier un commentaire.
Utilisation
String.Equals
avec les paramètres appropriés pour le rendre insensible à la casseString.Equals
devrait être en mesure d'accepter null comme paramètre.FirstOrDefault()
renvoie la valeur null si le LINQ déclaration ne correspond à aucune des résultats.Plutôt si
==
utiliser le.Equals(name, StringComparison.OrdinalIgnoreCase)
méthode.Si c'est une LINQ to SQL de la requête à l'encontre d'une base de données avec un classement de casse, alors qu'il a déjà est insensible à la casse. Rappelez-vous que LINQ to SQL n'est pas réellement de l'exécution de votre == appel; c'est de le regarder comme une expression et de la convertir vers un opérateur d'égalité dans SQL.
Si c'est LINQ to Objects, vous pouvez utiliser des chaînes de caractères.Égaux que les autres affiches ont souligné.
Il permettra également de gérer lors de son Nom,la Catégorie,la Société est
null
Method 'Boolean Equals(System.String, System.String, System.StringComparison)' has no supported translation to SQL.
de la même façon:'Boolean Equals(System.String, System.StringComparison)' has no supported translation to SQL.
Incorrect number of arguments supplied for call to method 'Boolean Equals(System.String, System.String, System.StringComparison)'
même quand je suis clairement en fournissant les arguments attendus. À l'aide de EF4 je pense que, probablement un bug.Utilisation
OrdinalIgnoreCase
avant - quelle est la différence entre cela etCurrentCultureIgnoreCase
?Si vous êtes à l'aide de C# 6.0, vous pouvez définir une courte extension de la méthode à être utilisé lors de la construction de LINQ états:
Utilisation:
Pour C# inférieure à 6,0, il ressemblera à ceci:
Changer de
Utiliser des chaînes de caractères.Est égal à(nom de l'article.Nom, StringComparison.OrdinalIgnoreCase) lorsque vous êtes sûr que votre base de données prend en charge.
E. g. SQLite avec un rassembler de NOCASE ignore l'option.
Oracle utilise les paramètres de la session NLS_COMP, NLS_SORT qui seront prises.
D'autre de ToLower() ou ToUpper() lorsque vous n'avez pas la culture.