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

本文关键字:枚举 字段 两个 另一个 存在 查找 是否 一个 | 更新日期: 2023-09-27 18:33:07

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

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

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

我的直觉说,加入一个结果的rep,然后加入PropMgr的另一个结果集。然后联接结果集并选择非重复。不确定这是否有效,以及是否有更有效的方法。


添加一些附加信息:一些数据将是

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

当比较两组并得到这个组合时,我想选择联系人"尼克"。

请记住,我有 IEnumerable 联系人列表和 IEnumerable 属性列表

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

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

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

尝试遵循 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

解决同一问题的方法有很多种......

尝试一些技术含量较低的方法:

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