10
votes

Comment obtenir l'article du dictionnaire par la valeur de la propriété

J'ai un dictionnaire .

utilisateur est un objet avec les propriétés uid , clé unique et plus. Ma clé de dictionnaire est la touche unique des utilisateurs.

maintenant, je veux obtenir un utilisateur à partir de mes valeurs de dictionnaire par un uid et non la touche, quelque chose comme contenant .. Comment sa fait avec Lambda Expr ou Linq? Y a-t-il une bonne solution pour cela?


1 commentaires

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.


4 Réponses :


6
votes
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.

0 commentaires

2
votes

Bien sûr, vous perdrez l'avantage d'avoir un dictionnaire, mais vous pouvez faire quelque chose comme: xxx


1 commentaires

FirstArdefault Accepte un prédicat optionnel que, s'il est fourni, prendra soin du filtrage (c'est-à-dire dict.values.firstambordefault (k => k.uid == xxxx) .)



18
votes

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();
        }
    }


2 commentaires

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/...



1
votes

Ceci devrait obtenir l'utilisateur de l'UID à partir du dictionnaire: xxx


0 commentaires