Last active
December 18, 2015 20:39
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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