Consider this code:
var query = from groupRole in CurrentItem.MEMGroupRoles
select groupRole.MEMRole;
this.AvailableRoles = this.allRoles.Except(query.AsEnumerable()).ToList();
In this code I take allRoles except those roles that CurrentItem already have. 2 issues:
- It doesn’t work because I compare on objects and those objects are different instances
- I don’t like 2 lines and like to improve.
Here is pseudo-code on what I really need to do right now:
var queryIds = from groupRole in CurrentItem.MEMGroupRoles
select groupRole.MEMRole.RoleId;
this.AvailableRoles = this.allRoles.Except(where RoleId query.AsEnumerable()).ToList();
How do I write query like this?
EDIT:
explanation:
- allRoles contains list of MEMRole objects
- CurrentItem.MEMGroupRoles contains list of MEMGroupRole objects and each MEMGroupRole contains MEMRole inside
I want to SELECT all MEMRole objects that’s inside allRoles EXCEPT those MEMRoles that burries inside CurrentItem. First code snippet would work, but I need to compare MEMRole to MEMRole by MEMRole.RoleId since it’s a different instances of the same database entity.
Following the approach you suggested:
Alternatively (althought I wouldn’t go that road), if you must have single query, you can append both roles collections (current and all), group them by
RoleIdand pick groups that only have single member:This results in roles that weren’t in
CurrentItem.MEMGroupRolescollection. But once again, it’s just … for sport 🙂