说我有以下

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/

10-11 13:55