2012-08-23 61 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);