我有一个列表,根据 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/