我有Dictionary<string, User>
。
User
是一个包含属性UID
,UNIQUE KEY
等的对象。我的词典键是用户的UNIQUE KEY
。
现在,我希望通过User
从我的字典值中获取UID
而不是密钥,例如ContainsKey
..如何用lambda expr或linq完成?那是一个很好的解决方案吗?
答案 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);
}