1

问题是:我有一个专栏,主题格式为:“波士顿 | 纽约 | 芝加哥”。记录中的名称可以不同,主题的数量也可以不同。我需要想出的是用这些名字的数量来收集相同的名字。

这就是我所做的:

 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();

一个简单的任务似乎有很多代码。任何想法如何简化这个?

谢谢!

4

3 回答 3

1

SelectMany您可以使用and构造列表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()});
于 2012-08-23T15:45:40.820 回答
0
var groups = queryResult
  .SelectMany(t => t.TopicData.Split('|')
  .GroupBy(n => n)
  .Select(g => new { Key = g.Key, Count = g.Count() });
于 2012-08-23T15:47:07.450 回答
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);
于 2012-08-24T22:12:49.740 回答