使用 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伏特加。

与上面的代码一样,要返回斯米尔诺夫伏特加,必须在文本框中输入确切的名称"斯米尔诺夫伏特加"。

使用 linq 筛选类似项的列表

这真的取决于你的意思,说"类似"

选项:

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;