根据单词在字符串中出现的次数对列表进行排序

时间:2014-11-13 06:47:10

标签: c# linq

我有一个

的列表
IEnumerable<RSPCA.LIB.Models.Search.SearchItem> results = 
newList<LIB.Models.Search.SearchItem>();

我的searchItem类有一个名为content的字符串字段。所以基本上我想根据特定字符串(术语)在内容字符串中出现的时间排序列表。 所以我要说我的术语是“abc”,所以如果列表的内容字段中的一个项目包含“abc”两次,而另一个项目包含“abc”3次,那么我希望这个项目包含两次。所以基本上基于Occurrence排序列表。我还在这里粘贴了我的搜索项目类:

public class SearchItem : SearchResultItem
{

    public string PageTitle { get; set; }
    public string PageDescription { get; set; }
    public string content {get; set;} // That's the one which I want to use
    }

非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

试试这个: -

var result = items.OrderByDescending(x => Regex.Matches(x.content,"abc").Count);

工作Fiddle

答案 1 :(得分:0)

您可以使用以下代码和NinjaNye.SearchExtensions nuget包

执行此操作
var results = items.Search(x => s.content)
                   .Containing("abc")
                   .ToRanked()
                   .OrderByDescending(x => x.Hits)
                   .Select(x => x.Item);

这应该比正则表达式实现快得多,这在您的实现中非常重要