【问题标题】:Entity Framework search records with a list of strings?带有字符串列表的实体框架搜索记录?
【发布时间】:2013-04-21 04:35:52
【问题描述】:

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

例如,如果我使用“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;
    }

【问题讨论】:

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


    【解决方案1】:

    你在找这个吗?

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

    【讨论】:

      【解决方案2】:

      这是你需要的吗:

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

      【讨论】:

        【解决方案3】:

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

        我试过了,效果很好:

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

        或者你的代码是这样的:

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

        它可能对其他人有用。

        【讨论】:

          猜你喜欢
          • 2021-09-13
          • 2016-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-16
          相关资源
          最近更新 更多