我有一个字符串列表,我按照它们在列表中的出现进行分组,如下所示(其中key是这些字符串的列表):
mostCommonKeywords = key.GroupBy(v => v)
.OrderByDescending(g => g.Count()) // here I get the count number
.Select(g => g.Key)
.Distinct()
.ToList();
我现在要做的事情就是当它们被整理出来时,我想得到它们的数量,因为LINQ可以清楚地区分它们的数量并将它们排序......我怎样才能得到列表中每个字符串的计数出现次数现在???
编辑:
我们说我的计数值看起来像这样:
124
68
55
48
32
19
13
10
我不能简单地将此值中的1添加到名为" Count"的变量中。正如@octavioccl建议的那样。我显然必须将它们存储在某种列表或其他内容中......
答案 0 :(得分:8)
使用Select
并投射到anonymous type:
var result=key.GroupBy(v => v)
.Select(g => new {g.Key, Count=g.Count()})
.OrderByDescending(e => e.Count)
// .Distinct()// Don't need this call
.ToList();
您还可以使用DTO投射查询:
public class CustomDTO
{
public string Key{get;set;} // Change the type in case you need to
public int Count{get;set;}
}
因此,您的查询将是:
var result=key.GroupBy(v => v)
.Select(g => new CustomDTO{Key=g.Key, Count=g.Count()})
.OrderByDescending(e => e.Count)
.ToList();
答案 1 :(得分:-1)
from a in keys
group a by a.key into g
select new { a.Key, Count = g.Count() };