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 无法识别方法 '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;
    }
4

3 回答 3

10

你在找这个吗?

var posts = (from p in ctx.posts
    where words.Any(w => p.title.Contains(w))
    select p).ToList();
于 2013-04-26T22:28:08.050 回答
4

这是你需要的吗:

ctx.posts.Where(post => words.Any(word => post.Title.Contains(word)))
于 2013-04-26T22:30:50.403 回答
0

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

我试过这个并且工作正常:

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

或者对于您的代码,如下所示:

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

它可能对其他人有用。

于 2019-11-11T00:31:27.707 回答