2013-12-13 44 views
4

我試圖從數據庫中提取記錄,其意義是 它應該getrecords其中名稱包含「searchKey」和名稱不在逗號分隔的excludeTerms數組中。 我如何在Linq中做到這一點?Linq查詢使用包含而不包含

Rows = (from u in DB.Clients 
     where u.Name.Contains(searchTerm) && !u.Name.Contains(string.Join(",", excludeTerms.Select(s => "'" + s + "'").ToArray())) 
     select new ClientModel 
     { 
      Name = u.FullName, 
      Id = u.Id, 
     }).Take(5).ToList(); 

其中excludeterma包含的元素列表假設

1)Sandy 
2)Mandy 
3)Larry etc 

List<string> excludeTerms = new List<string>(); 

回答

7

不幸的是,你可以使用本地序列只包含運營商(它們轉換爲SQL IN操作符)。所以,你可以整個過濾移動到內存

Rows = (from u in DB.Clients.AsEnumerable() 
     where u.Name.Contains(searchTerm) && 
      !excludeTerms.Any(s => u.Name.Contains(s)) 
     select new ClientModel { 
       Name = u.FullName, 
       Id = u.Id, 
     }).Take(5).ToList(); 

或者只是過濾掉排除條款:

Rows = (from u in DB.Clients 
     where u.Name.Contains(searchTerm)     
     select new ClientModel { 
       Name = u.FullName, 
       Id = u.Id, 
     }).AsEnumerable() 
      .Where(m => !excludeTerms.Any(s => m.Name.Contains(s))) 
      .Take(5).ToList(); 
+0

能否請你告訴我什麼是「S」在上面的查詢? – Sweetie

+0

@Sweetie's'是excludeTerms集合中的項目。因此'!excludeTerms.Any(s => u.Name.Contains(s))'表示客戶名稱中不包含排除的術語 –