这是问题所在: 我有一个专栏的主题格式为:“boston | new york | chicago”。名称可以不同,主题的数量可以在记录中变化。 我需要提出的是使用这些名称的计数来收集相同的名称。
这就是我所做的:
var splitted = queryResult.Select(x => x.TopicData);
List<string> lstOfTopics = new List<string>();
foreach (var element in splitted)
{
string[] splitedTopics = element.Split('|');
lstOfTopics.AddRange(splitedTopics);
}
var groupedTopics = lstOfTopics.GroupBy(x => x).Select(group => new {key = group.Key, count = group.Count()}).AsEnumerable();
似乎有很多简单任务的代码。任何想法如何简化这个?
谢谢!
答案 0 :(得分:1)
您可以使用SelectMany
和ToList
List<string> lstOfTopics = splitted.SelectMany(x => x.Split('|')).ToList();
您也可以完全省略列表的构造:
var groupedTopics = queryResult
.SelectMany(x => x.TopicData.Split('|'))
.GroupBy(x => x)
.Select(group => new { group.Key, Count = group.Count()});
答案 1 :(得分:0)
var groups = queryResult
.SelectMany(t => t.TopicData.Split('|')
.GroupBy(n => n)
.Select(g => new { Key = g.Key, Count = g.Count() });
答案 2 :(得分:0)
查询语法可以很好而紧凑:
var topics =
from qr in queryResult
from topic in qr.TopicData.Split('|')
group topic by topic into g
select new { Topic = g.Key, Count = g.Count() };
如果您只想要独特的主题,而不是他们的计数......
List<string> topicList = topics.Select(item => item.Topic);