J'ai un dictionnaire maintenant, je veux obtenir un
utilisateur code> est un objet avec les propriétés
uid code>,
clé unique code> et plus. Ma clé de dictionnaire est la touche
unique code> des utilisateurs. P>
utilisateur code> à partir de mes valeurs de dictionnaire par un
uid code> et non la touche, quelque chose comme
contenant code> .. Comment sa fait avec Lambda Expr ou Linq? Y a-t-il une bonne solution pour cela? P>
4 Réponses :
return dict.Single(x => x.Value.UID == target); Of course, you might find that your design is questionable if it involves continually doing linear searches across a Dictionary.
Bien sûr, vous perdrez l'avantage d'avoir un dictionnaire, mais vous pouvez faire quelque chose comme:
FirstArdefault Code> Accepte un prédicat optionnel que, s'il est fourni, prendra soin du filtrage (c'est-à-dire
dict.values.firstambordefault (k => k.uid == xxxx) code>.)
Voici un échantillon de travail:
using System; using System.Collections.Generic; using System.Linq; internal class User { public string ID { get; set; } public string Name { get; set; } } internal class Program { private static void Main(string[] args) { Dictionary<string, User> dic = new Dictionary<string, User>(); dic.Add("1", new User { ID = "id1", Name = "name1" }); dic.Add("2", new User { ID = "id2", Name = "name2" }); dic.Add("3", new User { ID = "id3", Name = "name3" }); User user = dic.Where(z => z.Value.ID == "id2").FirstOrDefault().Value; Console.ReadKey(); } }
Notation plus courte: utilisateur utilisateur = dic.firstambordefault (z => z.value.id == "id2"). Valeur; Et il a besoin d'une vérification nulle sur FirstArdefault également pour éviter NullReferenceException sur la valeur;)
Ou à la caisse de cette réponse avec Don John Corleone Skeet pour une discussion: Stackoverflow.com/Questtions/5424968/...
Ceci devrait obtenir l'utilisateur de l'UID à partir du dictionnaire:
Veuillez poster le code que vous avez jusqu'à présent (le cas échéant). Si vous n'en avez pas encore, écrivez-le et revenez lorsque vous pouvez fournir un exemple.