Linq Query使用Contains而不包含

Swe*_*tie 6 c# sql-server asp.net linq-to-sql asp.net-mvc-3

我试图从数据库中获取记录,因为它应该获取其中name包含"searchKey"的记录,并且名称不在逗号分隔的excludeTerms数组中.我怎么能在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();
Run Code Online (Sandbox Code Playgroud)

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

1)Sandy
2)Mandy
3)Larry etc
Run Code Online (Sandbox Code Playgroud)
List<string> excludeTerms = new List<string>();
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 11

遗憾的是,您只能将本地序列与Contains运算符(将其转换为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();
Run Code Online (Sandbox Code Playgroud)

或者只是过滤掉排除的术语:

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();
Run Code Online (Sandbox Code Playgroud)