2012-08-23 27 views
1

这里是问题: 我有一个专栏的格式为:“波士顿|纽约|芝加哥”。名称可以不同,主题数量可以在记录中变化。 我需要拿出的是与这些名称的数量相同的名称的集合。如何更有效地重写(linq与拆分)?

这是我做了什么:

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

可以使用SelectManyToList构建列表:

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()}); 
0
var groups = queryResult 
    .SelectMany(t => t.TopicData.Split('|') 
    .GroupBy(n => n) 
    .Select(g => new { Key = g.Key, Count = g.Count() }); 
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);