如何通过属性值从字典中获取项目

时间:2011-12-23 15:01:36

标签: c# linq lambda

我有Dictionary<string, User>

User是一个包含属性UIDUNIQUE KEY等的对象。我的词典键是用户的UNIQUE KEY

现在,我希望通过User从我的字典值中获取UID而不是密钥,例如ContainsKey ..如何用lambda expr或linq完成?那是一个很好的解决方案吗?

4 个答案:

答案 0 :(得分:15)

这是一个工作样本:

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

答案 1 :(得分:5)

return dict.Single(x => x.Value.UID == target);

当然,如果您的设计涉及在Dictionary内不断进行线性搜索,您可能会发现自己的设计存在疑问。

答案 2 :(得分:1)

当然,您将失去拥有字典的好处,但您可以执行以下操作:

var user = dict.Values.FirstOrDefault(k=>k.UID==xxxx);

答案 3 :(得分:0)

这应该从字典中获取用户的UID:

public User GetUserForUid(Dictionary<string, User> dictionary, int uid)
{
    return dictionary.Values.FirstOrDefault(u => u.UID == uid);
}