Dans le code ci-dessous, je souhaite comparer deux GUID. Le problème est que je ne reçois aucune tâche retournée car les GUID sont différents (majuscules ou minuscules). Je dois effectuer une comparaison insensible à la casse.
MembershipUser membershipUser = Membership.GetUser(); ssortingng strUserId = membershipUser.ProviderUserKey.ToSsortingng(); Guid userId = new Guid(strUserId.ToUpper()); lblUserId.Text = userId.ToSsortingng(); DataModelEntities dc = new DataModelEntities(); var userTasks = dc.tasks.Where(t => t.user_id == userId).ToList();
Comment comparer les GUID et trouver des correspondances indépendamment du cas?
UPDATE 1 convertit maintenant le GUID du fournisseur d’appartenance en un GUID
Guid userId = (Guid) membershipUser.ProviderUserKey;
Mais je n’ai toujours pas d’allumettes.
Vous ne savez pas pourquoi vous les comparez sous forme de texte, mais au lieu de t.user_id == userId
utilisez t.userId.Equals(userId, SsortingngComparison.OrdinalIgnoreCase)
Le == est surchargé sur Guid, vous n’avez donc pas besoin de comparer les représentations de chaîne.
Voir http://msdn.microsoft.com/en-us/library/system.guid.op_equality(v=VS.90).aspx
J’ai toujours eu le dillema d’utiliser == pour la comparaison de colonnes guid / uniqueidentifier dans les instructions linq (en particulier dans la clause where), j’ai donc choisi un moyen plutôt sûr d’utiliser – (entityGuidColumn.CompareTo (guidParameter) == 0). Cela a fonctionné pour moi. Donner un coup de feu.
Un moyen facile d’ignorer la casse lors de la comparaison d’une chaîne consiste à tout convertir en minuscule (ou majuscule) avant de la comparer. Alors:
var userTasks = dc.tasks.Where(t => t.user_id.ToSsortingng().ToLower() == userId.ToSsortingng().ToLower()).ToList();
Cela étant dit, je suis d’accord avec les autres commentateurs sur le fait que vous devriez utiliser une comparaison native de GUID, pas une comparaison de chaîne.