查找一个Enumerable中的字段是否存在于另一个可能的两个字段中

时间:2013-09-29 04:23:25

标签: c# linq ienumerable

我有两个由不同类型组成的枚举。

public Contact
{
    public string fullName;
}

public Property
{
    public string Rep;
    public string PropMgr;
}

我正在尝试获取在Rep或PropMgr字段中表示的所有“联系人”。

我的直觉说在一个结果上加入rep,然后在PropMgr上加入另一个结果集。然后加入结果集并选择distinct。不确定这是否会起作用,如果它看起来更有效。


添加一些额外信息: 一些数据将是

Contact
  FullName: Nick

Property
  Name: "Happy Place"
  PropMgr: Nick
  Rep: Sally

当比较两组并且我得到这个组合时,我想选择联系人“Nick”。

请记住我有IEnumerable ContactsList和IEnumerable PropertyList

3 个答案:

答案 0 :(得分:0)

尝试按照Linq查询

Contacts.Select(x=>x.fullName).Intersect(Properties.Select (x=>x.Rep).Union(Properties.Select(x=>x.PropMgr))

// contacts -> IEnumerable of Contact, Properties -> IEnumerable of Property

答案 1 :(得分:0)

我没有任何数据可以测试它,但我想这样的事情应该有效:

IEnumerable<Contact> contacts = ...
IEnumerable<Property> properties = ...

var query = from property in properties
            from name in new[] { property.Rep, property.PropMgr }
            join contact in contacts on name equals contact.FullName
            select contact;

var result = query.Distinct().ToList();

答案 2 :(得分:0)

解决同样问题的方法很多......

尝试一些低技术的东西:

var namesInProperties = new HashSet<string>();
foreach (Property p in PropertyList)
{
    namesInProperties.Add(p.PropMgr);
    namesInProperties.Add(p.Rep);
}
IEnumerable<Contact> matchingContacts = ContactsList.Where(c => namesInProperties.Contains(c.fullName));