说我有以下
var searches = new ObservableCollection<Book>();
searches
包含book对象public class Book
{
public string Title { get; set;}
public string Desc {get; set;}
}
我想按匹配的字符串对
searches
进行排序。首先,它检查Title
,然后根据搜索字符串与Title
开头之间的接近程度对它们进行排名。接下来,它检查Desc
并按照从“Desc。”开始的搜索字符串出现的接近程度对其进行排名。例如,如果我有
因此,假设搜索关键字为
ABC
,我希望对searches
进行排序,以便获得以下内容。结果对标题中包含搜索字符串的项目具有更高的优先级。如何使用LINQ实现此目的?
最佳答案
您可以使用等级功能为每本书定义一个“分数”,然后按分数排序。
IE。
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分中发现,所以uo获得了得分最高的最相关的书。
关于c# - 对集合进行排序,并根据特定条件对结果进行排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23538512/