使用 linq 筛选类似项的列表
本文关键字:列表 linq 筛选 使用 | 更新日期: 2023-09-27 18:37:01
我有一个列表,我根据 Xaml 中文本框中的文本输入进行筛选。下面的代码过滤存储在 results
变量中的列表。该代码检查文本框输入,即 queryString
是否与results
列表中任何项的Name
完全匹配。这只会从列表中带回字符串与项目名称完全匹配的项目。
var filteredItems = results.Where(
p => string.Equals(p.Name, queryString, StringComparison.OrdinalIgnoreCase));
如何更改它,以便它返回列表中Name
类似于 queryString 的项目?
描述我所说的类似是什么意思:列表中的项目具有名称= Smirnoff 伏特加。我想要它,以便在文本框中输入"伏特加"或"smirnoff",将返回项目Smirnoff伏特加。
与上面的代码一样,要返回斯米尔诺夫伏特加,必须在文本框中输入确切的名称"斯米尔诺夫伏特加"。
这真的取决于你的意思,说"类似"
选项:
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# 中的源代码。通过使用它,您可以确定查询字符串与列表中字符串的"接近程度"。
试试这个:
fileList.Where(item => filterList.Contains(item))
试试这个:
var query = "Smirnoff Vodka";
var queryList = query.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries);
var fileList = new List<string>{"smirnoff soup", "absolut vodka", "beer"};
var result = from file in fileList
from item in queryList
where file.ToLower().Contains(item.ToLower())
select file;