Reputation: 9013
I have 2 collections - invitedUserAllowedTimes and meeting.AllowedTimes. Collection invitedUserAllowedTimes has collection invitedUserAllowedTimes.Times.
Collection invitedUserAllowedTimes.Times has values TimeID = 1, TimeID = 2, TimeID = 3, TimeID = 4, TimeID = 5, TimeID = 6.
Collection meeting.AllowedTimes has values TimeID = 2, TimeID = 3, TimeID = 4.
I want to select from invitedUserAllowedTimes all records, which has all meeting.AllowedTimes TimeIDs. I try to do following:
var times = (
from i in invitedUserAllowedTimes
where i.Times.All(p => meeting.AllowedTimes.Any(k=>k.TimeID == p.TimeID))
select i).ToList();
but get no records. Why? What is incorrect in my code?
Upvotes: 1
Views: 57
Reputation: 16137
It's not returning anything because you're asking it to return all invitedUserAllowedTimes
where all of its times are in meeting.AllowedTimes
. So your example won't return it because meeting.AllowedTimes
doesn't have TimeID 1, 5, or 6.
Instead you need to do this:
var times = (
from i in invitedUserAllowedTimes
where meeting.AllowedTimes.All(k=> i.Times.Contains(k.TimeID))
select i).ToList();
Or, using extension methods:
var times = invitedUserAllowedTimes.Where(i => meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID)).ToList();
Upvotes: 1
Reputation: 2108
Try this:
var times = (from i in invitedUserAllowedTimes
where meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID))
select i).ToList();
Upvotes: 1