2

我编写了一个扩展方法来尝试计算出现在描述中的字符串中的单词。这是功能(例如,搜索“软”我想看到微软,所以称它为关键字可能不正确,但我想提前沟通。关键字只是当时唯一想到的东西) :

public static int KeywordCount(this string str, string Phrase)
{
    string[] elements = Phrase.ToUpper().Split(' ');
    int count = 0;
    foreach (string element in elements)
    {
        if (str.ToUpper().Contains(element))
            count++;
    }
    return count;
}

我试图然后通过一个项目列表并仅包括至少有一些命中的项目,但还根据命中数对其进行排序(如果所有关键字都在描述中,它需要位于顶部并且等等。

到目前为止,我所拥有的是:

 selection.AddRange(all.Where(c => c.Description.KeywordCount(query) > 0));

然后如何根据 KeywordCount 的返回值进行排序?我也有一种感觉,我要去的方向将导致对所有项目进行 KeywordCount 搜索 1 次,对于计数 > 0 的项目进行 1 次额外搜索,所以如果有办法同时进行比较和排序,我想知道怎么做。

4

2 回答 2

3

先进行选择以获取值和计数,然后按计数过滤,然后按计数排序,然后仅选择值。

selection.AddRange(
    all.Select(c=>new {Val = c, Count = c.Description.KeywordCount(query))
       .Where(t => t.Count > 0))
       .OrderBy(t => t.Count)
       .Select(t => c.Val);

这样,每个项目都会调用一次 KeywordCount。

于 2012-11-30T17:08:22.040 回答
1

Linq orderBy 会起作用吗?

List<someType> sorted = all.OrderBy(c => c.Description.KeywordCount(query)).ToList()
于 2012-11-30T17:04:47.017 回答