【问题标题】:Contains: how to get ANY result with "if(TableName.Name.Contains"(Textbox.text))"?包含:如何使用“if(TableName.Name.Contains”(Textbox.text))”获得任何结果?
【发布时间】:2016-03-08 22:02:52
【问题描述】:

只有当我从表中正确搜索名称时,我的代码才有效。我必须搜索全名并用大写等正确拼写。 例如。我无法通过搜索“火星人”或“火星人”等来搜索“火星人”。

using(MovieEntities db = new MovieEntities()){

   var searchMovie = new List<Movie>(db.Moviess.ToList());
            var searchFilter = new List<Movie>();

            foreach (var search in searchMovie)
            {
                if (search.Name.Contains(txtSearch.Text))
                {

                    searchFilter.Add(search); 
                   //so far, only adds if I search it's full/correctly name

                }
            }/* print out */}

如果它包含 txtSearch.Text 的任何部分并且还忽略小写/大写等,我该如何搜索?

PS:我正在尝试了解 LINQ,如果您也可以提供替代的 Linq 解决方案,我将不胜感激。

谢谢

【问题讨论】:

标签: c# sql asp.net entity-framework linq


【解决方案1】:

这将使搜索保持在数据库端,从而加快搜索速度,而且大多数人的数据库都配置为不区分大小写,因此您可以免费获得。

using(MovieEntities db = new MovieEntities()){
  var searchFilter=db.Moviess.AsQueryable();
  foreach(var word in txtSearch.Text.Split(' '))
  {
    searchFilter=searchFilter.Where(f=>f.Name.Contains(word));
  }
  /* Print */  

尽管您询问“我如何搜索它是否包含 txtSearch.Text 的任何部分”,但这不是它的作用。它确保它以更典型用法的任何顺序包含 txtSearch.Text 的所有单词。它也可以重写到任何部分,但是“任何东西”都会返回大量结果。

【讨论】:

  • EF 真的支持.Contains 表达式吗?上次我用它不会让我。诚然,那是很久以前的事了 - 现在可能会更新。
  • 现在可以肯定了。它将根据许多因素转换为 LIKE %..% 或 charindex(...)。它不(或不)支持的是 Contains 采用两个参数来支持强制不区分大小写/敏感版本。
  • @RobertMcKee 我已经使用 EF7 对其进行了测试,并且确实可以按预期工作。这使您的答案成为使用最新版本 EF 时的正确方法!很抱歉,我的回答在我不知道的情况下获得了批准。
  • 它也适用于 EF 6.x。我无法评论之前的版本。
【解决方案2】:

您的查询应该已经搜索到任何包含您的txtSearch.Text 的字符串,因为您使用的是Contains 而不是Equals。唯一缺少的是使其不区分大小写。您可以通过在两个字符串上使用String.ToLowerString.ToUpper 方法将两个字符串都设为小写(或大写)来实现。

所以在你的情况下,它应该是:

if (search.Name.ToLower().Contains(txtSearch.Text.ToLower()))
{
    // ...
}

【讨论】:

  • 啊谢谢你的解释,解决了我的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多