Skip to content

Instantly share code, notes, and snippets.

@hoganlong
Last active December 18, 2015 20:39
Show Gist options
  • Save hoganlong/5841555 to your computer and use it in GitHub Desktop.
Save hoganlong/5841555 to your computer and use it in GitHub Desktop.
For stackoverflow question at http://stackoverflow.com/questions/17242522/linq-not-trivial-group-by To run use linqpad and set it to C# program
void Main()
{
Person p1 = new Person();
p1.Groups = new List<Group>();
p1.Groups.Add(new Group { GroupType = GroupTypesEnum.a });
p1.Groups.Add(new Group { GroupType = GroupTypesEnum.b });
Message m1 = new Message();
m1.Recipient = p1;
Person p2 = new Person();
p2.Groups = new List<Group>();
p2.Groups.Add(new Group { GroupType = GroupTypesEnum.b });
p2.Groups.Add(new Group { GroupType = GroupTypesEnum.c });
Message m2 = new Message();
m2.Recipient = p2;
Person p3 = new Person();
p3.Groups = new List<Group>();
p3.Groups.Add(new Group { GroupType = GroupTypesEnum.b });
Message m3 = new Message();
m3.Recipient = p3;
List<Message> messages = new List<Message>();
messages.Add(m1);
messages.Add(m2);
messages.Add(m3);
var result = messages
.SelectMany(m => m.Recipient.Groups)
.GroupBy(t => t.GroupType)
.Select(g => new { gType = g.Key, count = g.Count()});
result.Dump();
}
enum GroupTypesEnum { a, b, c};
// Define other methods and classes here
class Message {
public Person Recipient;
}
class Person {
public List<Group> Groups;
}
class Group {
public GroupTypesEnum GroupType;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment