2013-04-26 47 views
2

我有一个记录数据库,每个记录都有一个标题。我想用搜索字符串搜索这个数据库,搜索字符串将被分成一个列表或一个数组。实体框架搜索记录与字符串列表?

因此,例如,如果我使用“Book Dog”进行搜索,它将搜索标题中包含“Book”或“Dog”的所有标题。

我使用实体框架,我想写下我想要做的是

string[] words; 
var posts = (from p in ctx.posts 
where p.title.contains(words) 
select p).ToList(); 

我使用StringExtension我在网上找到试过最简单的方法,但我会得到下面的错误 “LINQ to Entities无法识别方法'布尔ContainsAny(System.String,System.String [])'方法,并且此方法不能转换为存储表达式。”

并且该扩展是

public static bool ContainsAny(this string str, params string[] values) 
    { 
     if (!string.IsNullOrEmpty(str) || values.Length > 0) 
     { 
      foreach (string value in values) 
      { 
       if (str.Contains(value)) 
        return true; 
      } 
     } 

     return false; 
    } 

回答

9

你在找这个?

var posts = (from p in ctx.posts 
    where words.Any(w => p.title.Contains(w)) 
    select p).ToList(); 
+0

作品!谢谢! – SikhWarrior 2013-04-27 00:00:41

4

这是你所需要的:

ctx.posts.Where(post => words.Any(word => post.Title.Contains(word)))