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.