Как получить элемент из словаря по значению свойства - PullRequest
9 голосов
/ 23 декабря 2011

У меня есть Dictionary<string, User>.

User - это объект со свойствами UID, UNIQUE KEY и более.Мой словарный ключ - UNIQUE KEY пользователей.

Теперь я хочу получить User из значений моего словаря по UID, а не по ключу, что-то вроде ContainsKey .. howэто сделано с лямбда-выражением или linq?Есть ли хорошее решение для этого?

Ответы [ 4 ]

15 голосов
/ 23 декабря 2011

Вот рабочий образец:

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();
        }
    }
5 голосов
/ 23 декабря 2011
return dict.Single(x => x.Value.UID == target);

Конечно, вы можете обнаружить, что ваш дизайн сомнителен, если он предполагает непрерывное выполнение линейного поиска по Dictionary.

1 голос
/ 23 декабря 2011

Конечно, вы потеряете преимущество наличия словаря, но вы можете сделать что-то вроде:

var user = dict.Values.FirstOrDefault(k=>k.UID==xxxx);
0 голосов
/ 23 декабря 2011

Это должно получить пользователя для UID из словаря:

public User GetUserForUid(Dictionary<string, User> dictionary, int uid)
{
    return dictionary.Values.FirstOrDefault(u => u.UID == uid);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...