c# - 使用 linq 过滤列表中的相似项目

标签 c# linq visual-studio-2012

我有一个列表,根据 Xaml 中 TextBox 中的文本输入进行过滤。下面的代码过滤存储在 results 变量中的列表。该代码检查文本框输入(即queryString)是否与结果列表中任何项目的Name完全匹配。这只会从列表中返回字符串与项目名称完全匹配的项目。

var filteredItems = results.Where(
                p => string.Equals(p.Name, queryString, StringComparison.OrdinalIgnoreCase));

如何更改此设置,以便返回列表中名称与查询字符串相似的项目?

描述我所说的相似的含义: 列表中的一个项目的名称为斯米诺伏特加 (Smirnoff Vodka)。我想要这样,如果在文本框中输入“vodka”或“smirnoff”,则将返回该项目 Smirnoff Vodka。

与上面的代码一样,要返回 Smirnoff Vodka 结果,必须在文本框中输入确切的名称“Smirnoff Vodka”。

最佳答案

这实际上取决于你所说的“相似”的意思

选项:

1) var filteredItems = results.Where( p => p.Name != null && p.Name.ToUpper().Contains(queryString.ToUpper());

2)还有一种称为“编辑距离”的算法:

http://en.wikipedia.org/wiki/Levenshtein_distance

http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm

最后一个链接包含 C# 源代码。通过使用它,您可以确定查询字符串与列表中的字符串“有多接近”。

关于c# - 使用 linq 过滤列表中的相似项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627465/

相关文章:

c# - 为什么 TakeLast<T>() 方法不适用于 ReplaySubject<T>

c# - 为什么 C# 性能比 VB 慢

c# - XmlSerializer 不显示对现有实例的更改

LINQ 从动态表名字符串中选择

C++ 模板链表链接器错误

c# - 如何从 ASP.NET MVC 中的不同 Controller 和操作呈现的 Html.Action 中检索 Controller 和操作名称

c# - 使用 LINQ 减去表中的列

c# - 如何使用 Linq 检查 JSON 中的标签

c# - 为什么 c# 上的 paypal 开发人员说明在 github 上不同?

c# - 正则表达式不起作用