Filter list with linq for similar items

旧时模样 提交于 2019-12-12 17:55:03

问题


I have a list in which I filter, according to the text input in a TextBox in Xaml. The code below filters the List stored in the results variable. The code checks if the textbox input,ie, queryString, matches the Name of any item in the results list EXACTLY. This only brings back the items from the list where the string matches the Name of a the item exactly.

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

How do I change this so that it returns the items in the list whose Name, is similar to the queryString?

To describe what I mean by Similar: An item in the list has a Name= Smirnoff Vodka. I want it so that if "vodka" or "smirnoff" is entered in the textbox, the the item Smirnoff Vodka will be returned.

As it is with the code above, to get Smirnoff Vodka returned as a result, the exact Name "Smirnoff Vodka" would have to be entered in the textbox.


回答1:


It really depends on what you mean, by saying "similar"

Options:

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

2) There is also also known algorithm as "Levenshtein distance":

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

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

The last link contains the source code in c#. By using it you cann determine "how close" the query string to the string in your list.




回答2:


Try this:

fileList.Where(item => filterList.Contains(item))



回答3:


Try this:

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;


来源:https://stackoverflow.com/questions/19627465/filter-list-with-linq-for-similar-items

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!