2017-03-18 98 views
1

我已經用逗號分隔的列表,看起來像這樣:Usinq LINQ到搜索分隔的列表與另一個分隔列表

string roleSearch = "Admin,Buyer,Broker"; 

而且我有一個List<Contacts>,看起來像這樣:

ContactID Roles 
---------------------------- 
    1  "Buyer,Partner" 
    2  "Broker" 
    3  "Admin,Buyer,Partner" 

我想在Linq中編寫一個查詢,該查詢將將List<Contacts>細化爲包含任意中中角色的項目。因此,考慮:

roleSearch = "Admin,Buyer" 

我想去的地方Roles包含「管理」或「買方」的任何記錄。兩者都沒有必要。如果「管理員」或「買方」都存在,那麼這是積極的。

使用this post,我接近:

string[] inRoles = roleSearch .Split(','); 
results = results.Where(r => inRoles.Contains(r.Roles)); 

但是,這不是它的確切,因爲它只與每個項目的inRoles精確匹配返回記錄。意思是,它只返回一個角色的記錄。 Roles類似於「Admin,Partner」的行會被忽略。

我嘗試這樣做:

string[] inRoles = roleSearch.Split(','); 
results = results.Where(r => inRoles.Contains(r.Roles.Split(','))); 

但沒有奏效。

P.S.我不能指望任何順序的角色。但是,好消息,潛在角色名單非常少。五最大。

回答

2

嘗試此代碼:

var test = results.Where(x => x.Roles.Split(',').Intersect(inRoles).Any()).ToList(); 

我使用Intersect擴展方法,以產生兩個序列的交集。

+0

謝謝!測試 –

+0

任何(r => inRoles.Contains(r))比Intersect(...) –