根据另一个Hashset元素从列表对象中选择元素的单个属性

时间:2013-10-23 08:38:07

标签: c# lambda

我有一个类的列表对象类型,

class person
{
    public string id { get; set; }
    public string regid { get; set; }
    public string name { get; set; }
}

List<person> pr = new List<person>();
pr.Add(new person { id = "2",regid="2222", name = "rezoan" });
pr.Add(new person { id = "5",regid="5555", name = "marman" });
pr.Add(new person { id = "3",regid="3333", name = "prithibi" });

和一个字符串类型的HashSet,

HashSet<string> inconsistantIDs = new HashSet<string>();
inconsistantIDs.Add("5");

现在我想从pr列表中只获取所有* regid * s,其中包含在inconsistantIDs HashSet中的id,并将它们存储到另一个string类型的HashSet中。

我已经尝试了但只能获得所有在invalidistantIDs列表中具有id的人(这只是一个例子)。

 HashSet<person> persons = new HashSet<person>(
            pr.Select(p=>p).Where(p=>
                    inconsistantIDs.Contains(p.id)
                ));

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

var regIDs = from p in pr join id in inconsistantIDs on p.id equals id
             select p.regid;
HashSet<string> matchingRegIDs = new HashSet<string>(regIDs); // contains: "5555"

答案 1 :(得分:1)

我不确定你想要的输出是什么,但无论如何我都会尝试:

HashSet<string> persons = new HashSet<string>(
            pr.Select(p=>p.regid)
              .Where(p=> inconsistantIDs.Any(i=>p.Contains(i))));