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と を使用してリストを作成できます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 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 に答える
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 に答える