根据Xaml中TextBox中的文本输入,我有一个列表可以过滤。下面的代码过滤了results
变量中存储的List。代码检查文本框输入(即queryString
)是否与Name
列表中的任何项目的results
完全匹配。这仅返回列表中的项目,其中字符串与项目的名称完全匹配。
var filteredItems = results.Where(
p => string.Equals(p.Name, queryString, StringComparison.OrdinalIgnoreCase));
如何更改此设置,以便将Name
,类似的列表中的项目返回到queryString?
用类似描述我的意思: 列表中的项目具有Name = Smirnoff Vodka。我想要它,如果在文本框中输入“伏特加”或“smirnoff”,将返回项目Smirnoff Vodka。
正如上面的代码所示,为了让Smirnoff Vodka返回结果,必须在文本框中输入确切名称“Smirnoff Vodka”。
答案 0 :(得分:2)
这实际上取决于你的意思,说“相似”
选项:强>
1) var filteredItems = results.Where( p => p.Name != null && p.Name.ToUpper().Contains(queryString.ToUpper());
2)还有一种已知的算法为“Levenshtein距离”:
http://en.wikipedia.org/wiki/Levenshtein_distance
http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm
最后一个链接包含c#中的源代码。通过使用它,您可以确定查询字符串与列表中的字符串“有多接近”。
答案 1 :(得分:0)
试试这个:
fileList.Where(item => filterList.Contains(item))
答案 2 :(得分:0)
试试这个:
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;