There is no “nice” way of doing this, but you could try this – project both, Group
and filtered Users
onto an anonymous object, and then Select
just the Groups
:
var resultObjectList = AllGroups.
Select(g => new
{
GroupItem = g,
UserItems = g.Users.Where(u => !u.IsInactive)
}).ToList();
FilteredGroups = resultObjectList.Select(i => i.GroupItem).ToList();
This isn’t a documented feature and has to do with the way EF constructs SQL queries – in this case it should filter out the child collection, so your FilteredGroups
list will only contain active users.
If this works, you can try merging the code:
FilteredGroups = AllGroups.
Select(g => new
{
GroupItem = g,
UserItems = g.Users.Where(u => !u.IsInactive)
}).
Select(r => r.GroupItem).
ToList();
(This is untested and the outcome depends on how EF will process the second Select
, so it would be nice if you let us know which method works after you’ve tried it).