使用LINQ C#获取最多的字符串值

时间:2016-10-24 18:42:54

标签: c# asp.net linq list count

我有一个字符串列表,我按照它们在列表中的出现进行分组,如下所示(其中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建议的那样。我显然必须将它们存储在某种列表或其他内容中......

2 个答案:

答案 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() };