var searches = new ObservableCollection<Book>();
搜索包含书籍对象
public class Book { public string Title { get; set;} public string Desc {get; set;} }
我想通过匹配的字符串对搜索进行排序.首先,它根据标题开头的搜索字符串的距离,对标题进行排序.接下来,它检查Desc,并按照“Desc”开头的搜索字符串的出现距离进行排序.
例如,如果我有
Book 1
Title: ABC Book Title
Desc: The description of book 1Book 2
Title: Book Title Only
Desc: There’s an ABC in the description of book 2Book 3
Title: Book Title ABC
Desc: ABC is in the beginning
所以让我们说搜索关键字是ABC,我希望搜索被排序,以便我得到以下内容.结果将标题中包含搜索字符串的项目的优先级更高.
Book 1
Title: ABC Book Title
Desc: The description of book 1Book 3
Title: Book Title ABC
Desc: ABC is in the beginningBook 2
Title: Book Title Only
Desc: There’s an ABC in the description of book 2
如何使用LINQ实现这一点?
解决方法
即
var searchString = "ABC"; var results = books.Select(b => new { Book = b,Rank = RankBook(b,searchString) }) .OrderBy(r => r.Rank) .Select(r => r.Book.Title);
而排名功能:
private int RankBook(Book b,string searchString) { int rank = 0; if (b.Title.Contains(searchString)) rank += 10; if (b.Desc.Contains(searchString)) rank += 5; return rank; }
这就是说:发现在title = 10点,发现在desc = 5分,所以你得到更高分数的最相关的书.
原文地址:https://www.jb51.cc/csharp/93849.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。