0

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

public Contact
{
    public string fullName;
}

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

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

我的直觉说加入代表以获得一个结果,然后加入 PropMgr 以获得另一个结果集。然后加入结果集并选择 distinct。不确定这是否会奏效,以及是否有更有效的方法。


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

Contact
  FullName: Nick

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

在比较两组时,我得到了这个组合,我想选择联系人“尼克”。

请记住,我有 IEnumerable ContactsList 和 IEnumerable PropertyList

4

3 回答 3

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
于 2013-09-29T04:32:54.580 回答
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();
于 2013-09-29T04:34:17.190 回答
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));
于 2013-09-29T04:52:43.390 回答