c# "like/contains"搜索列表

标签 c# linq

        query = Files
            .Where(file => file.Fileinfo.Name.ToUpper().Contains(textBox1.Text.ToUpper()))
            .Take(7).ToList();

我讨厌问这个问题,但我根本没有任何进展!这看起来应该是一项微不足道的任务,但我运气不好。

上述查询需要通过文件名列表进行搜索。它将返回列表中的搜索结果,其中包含前 7 个最相关的结果。该事件发生在“KeyPress”。

尽管如此,它非常不精确,并且还发生了一些非常奇怪的结果。

例如:如果我列表中的项目名称为:“ZeroWidthSplit” 如果我的文本框包含“Z”,它就可以工作。如果它包含 ZE,它就可以工作。如果它包含“ZER”,它仍然会显示。 如果我输入 ZERO,它就会从搜索结果中消失!

所以我想我的问题是:如何搜索文件列表,并使其返回前 7 个最相关的结果。

哦,如果只有 4 个相关结果,那也没关系。限制只有 7 个。

另一个例子:

F.x 如果我写“sum of”作为搜索查询。它返回:

  1. 77 - 质数之和 5000 不同的方式
  2. 52 以下连续质数之和 一百万

如果我写“sum of p”,它返回:

  1. 77 - 质数之和 5000 不同的方式

如果我写“c 的总和”它什么都不返回...

我可以举出更多奇怪的例子。

最佳答案

这个错误听起来确实很奇怪,但正如 Konamiman 指出的那样,稍微重构一下也无妨,尽管我不喜欢使用 ToUpper 或 ToLower。我将按照以下方式进行:

string theText = textBox1.Text;

query = Files
            .Where(file => file.Fileinfo.Name.IndexOf(theText, 
                StringComparison.OrdinalIgnoreCase) != -1)
            .Take(7).ToList();

关于c# "like/contains"搜索列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721337/

相关文章:

c# - 从 XmlDataSource 填充 DropDownList

c# - 使用 linq foreach 更新 2 个字段

c# - Linq更新多列

vb.net - LinqDataSource 抛出 System.Data.Linq.Mapping.DataAttribute is not defined 错误

C# - 有两个列表的 Linq

javascript - 从 C# 页面加载传递数组的数组以在 Javascript 函数中使用

c# - 向 xml 节点添加前缀

c# - 在等待另一个线程完成它的工作时取消阻塞主线程

c# - 通过网络在每个字段的基础上传输对象

c# - 为什么我们不能在 Entity Framework 查询中使用数组?