我编写了一个扩展方法来尝试计算出现在描述中的字符串中的单词。这是功能(例如,搜索“软”我想看到微软所以称它为关键字可能不正确,但我想提前沟通。关键字是当时唯一想到的事情) :
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次,额外1x项目计数> 0,所以如果有办法同时进行比较和排序,我想知道如何。
答案 0 :(得分: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。
答案 1 :(得分:1)
Linq会订购吗?
List<someType> sorted = all.OrderBy(c => c.Description.KeywordCount(query)).ToList()