1

次のクラスがあります(構文エラーを省略してください)

class Message {
   public Person Recipient
   ...
}

class Person {
   public List<Group> Groups
   ...
}

class Group {
   public GroupTypesEnum GroupType
   ...
}

グループの種類ごとにメッセージの数を生成したいと考えています。例:

  1. 「Xグループ」(タイプT1)、「Yグループ」(タイプT2)の「Aさん」に「こんにちは」とメッセージ
  2. 「グループZ」(タイプT1)に属する「人物B」へのメッセージ「何とか」

必要なクエリは次のように出力されます。

グループ タイプ: T1、メッセージ カウント: 2
グループ タイプ: T2、メッセージ カウント: 1

Linq To Entities でこれを達成するにはどうすればよいですか?
人がゼログループに属する可能性があることを考慮して

これをメモリ内で実現する方法は知っていますが、Linq-To-Entities を使用したいと思います。

Dictionary<GroupTypesEnum, int> count = new ...

foreach (Message msg in db.Messages) {
    foreach (Group group in msg.Recipient.Groups) {
         count[group.GroupType]++;
    }
}
4

1 に答える 1

1

これはそれほど難しいことではありませんSelectMany

  var result = messages
    .SelectMany(m => m.Recipient.Groups)
    .GroupBy(t => t.GroupType)
    .Select(g => new { gType = g.Key, count = g.Count()});

次に、result.Dump() - LinqPad で

結果

テスト コードの完全なソースはこちら: https://gist.github.com/hoganlong/5841555

于 2013-06-22T03:48:36.100 に答える