2013-05-29 103 views
4

有什麼方法可以評估一個字符串是否包含列表的所有元素或列表中的所有元素?使用LINQ實體?EF linq/lambda .contains(list [String])?

我一直在試圖使用predicateBuilder和其他人,但我不是%100成thoses。

編輯

類似:

string[] words = searchString.Split(' '); 

var resultado = db.users 
         .Where(u => u.fullName.contains(words)) 
           .Select(s => new { user_id = s.id_user, nombre = s.fullName}) 
           .ToList(); 
+0

而答案是:是。更確切的問題,也許呢? –

+1

是的,你可以使用包含方法做到這一點 – rajansoft1

+0

包含可以採取列表作爲參數? – EricGS

回答

13

你需要扭轉你的Contains使用檢查words收集的fullName

string[] words = searchString.Split(' '); 

var resultado = db.users 
    .Where(u => words.Contains(u.fullName)) 
    .Select(s => new { user_id = s.id_user, nombre = s.fullName}) 
    .ToList(); 

,將匹配一個項目在words陣列中。

要匹配words所有在用戶的fullName,使用All

var resultado = db.users 
    .Where(u => words.All(w => u.fullName.Contains(w)) 
    .Select(s => new { user_id = s.id_user, nombre = s.fullName}) 
    .ToList(); 
+0

那麼按順序匹配所有內容呢?當'searchString ='Bi Gat''時匹配'比爾蓋茨',但'searchString ='Gat Bi'時匹配'比爾蓋茨' –

0

這是更好地與intersect

IEnumerable<string> first = ...; 
IEnumerable<string> second= ...; 
var duplicates = first.Intersect(second); 

做且行包含

bool contains = duplicates.Any();