Comment effectuer une comparaison des GUID insensible à la casse avec LINQ?
Dans le code ci-dessous, je veux comparer deux Guid. Le problème est que je ne reçois pas toutes les tâches retourné parce que les GUID sont différents (majuscule vs en minuscules). J'ai besoin d'effectuer une casse comparer.
MembershipUser membershipUser = Membership.GetUser();
string strUserId = membershipUser.ProviderUserKey.ToString();
Guid userId = new Guid(strUserId.ToUpper());
lblUserId.Text = userId.ToString();
DataModelEntities dc = new DataModelEntities();
var userTasks = dc.tasks.Where(t => t.user_id == userId).ToList();
Comment puis-je comparer les Guid et trouver des correspondances indépendamment de la casse?
Mise à JOUR 1
maintenant coverting le guid du fournisseur d'appartenances à un GUID
Guid userId = (Guid) membershipUser.ProviderUserKey;
Mais je ne suis toujours pas arriver tout les matchs.
source d'informationauteur DenaliHardtail
Vous devez vous connecter pour publier un commentaire.
Ne savez pas pourquoi vous êtes la comparaison en tant que texte, mais au lieu de
t.user_id == userId
utilisationt.userId.Equals(userId, StringComparison.OrdinalIgnoreCase)
L' == est surchargé sur Guid de sorte que vous n'avez 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 un problème pour de l'aide == pour guid/uniqueidentifier colonnes de comparaison dans linq consolidés (en particulier dans la clause where) j'ai donc pris un peu de risques de l'itinéraire de l'aide - (entityGuidColumn.CompareTo(guidParameter)==0) . Cela a fonctionné pour moi. Donner un coup de feu.
Un moyen facile d'ignorer la casse lors d'une comparaison de chaîne est juste tout convertir inférieur (ou supérieur) avant de les comparer. Donc:
Cela étant dit, je suis d'accord avec les autres commentateurs que vous devriez être à l'aide d'un natif GUID comparaison, pas une chaîne de comparaison.