2013-09-29 53 views
0

我有兩個由不同類型組成的枚舉類型。查找一個Enumerable中的字段是否存在於另一個可能的字段中

public Contact 
{ 
    public string fullName; 
} 

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

我想要獲得Rep或PropMgr字段中表示的所有「聯繫人」。

我的直覺說加入代表一個結果,然後加入PropMgr的另一個結果集。然後加入結果集並選擇不同。不知道這是否會起作用,以及它是否會有更有效的方式。


添加一些額外的信息: 一些數據會

Contact 
    FullName: Nick 

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

當比較兩個集合,我得到這個組合,我想選擇聯繫人「尼克」。

記住我的IEnumerable ContactsList和IEnumerable對propertyList

+0

你是說'fullName'值等於'Rep'或'PropMgr'屬性值? –

+0

是的。它可能是 – Nick

+0

我可能會誤解這個問題,但不會。在哪裏(fullName == Rep | fullName == PropMgr)解決了它? – jose

回答

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

這個技巧。感謝幫助! – Nick

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

呃,是的,你也是。謝謝您的幫助! – Nick

相關問題