实体框架搜索带有字符串列表的记录?

时间:2013-04-26 22:12:15

标签: asp.net sql entity-framework asp.net-mvc-4

我有一个记录数据库,每个记录都有一个标题。我希望能够使用搜索字符串搜索此数据库,搜索字符串将分为列表或数组。

例如,如果我使用“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无法识别方法'Boolean 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;
    }

3 个答案:

答案 0 :(得分:10)

你在找这个吗?

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

答案 1 :(得分:4)

这是你需要的:

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

答案 2 :(得分:0)

我正在搜索类似您的问题(注册表格)的问题,但我的问题是:如何查找(从文本框中输入的)全名是否相同完全到数据库中的记录?

我尝试了这一点,并运行良好:

db.Users.Any(x => x.UserName.Equals(txtUsername.Text))

或者对于这样的代码:

ctx.posts.Any(x => x.title.Equals(words))

这可能对其他人有用。