2013-04-26 82 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)))