2013-03-01 9 views
1

나는 2 개의 콜렉션을 가지고 있습니다. - 초청 된 UserAllowedTimesmeeting.AllowedTimes입니다. 컬렉션 초대 된 사용자 맞춤 시간에는 초대 컬렉션이 있습니다 .UAAllowedTime #입니다.LINQ - many to many

컬렉션 invitedUserAllowedTimes.Times 값 TimeID = 1 TimeID = 2 TimeID = 3 TimeID = 4 TimeID = 5 = 6 TimeID

컬렉션이 meeting.AllowedTimes 값을 갖는다 TimeID = 2, TimeID = 3, TimeID = 4

나는 모든 meeting.AllowedTimes에게 TimeIDs있다 invitedUserAllowedTimes 모든 기록에서 선택합니다.

var times = (
    from i in invitedUserAllowedTimes 
    where i.Times.All(p => meeting.AllowedTimes.Any(k=>k.TimeID == p.TimeID)) 
    select i).ToList(); 

을하지만 기록을 얻을 : 나는 다음을 수행하려고합니다. 왜? 내 코드에서 잘못된 부분은 무엇입니까?

답변

1

당신이 그 시대의 모든 invitedUserAllowedTimes모든meeting.AllowedTimes에 반환을 요구하고 있기 때문에 아무것도 반환 아니에요.

var times = invitedUserAllowedTimes.Where(i => meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID)).ToList(); 
: 확장 방법을 사용하여,

var times = (
    from i in invitedUserAllowedTimes 
    where meeting.AllowedTimes.All(k=> i.Times.Contains(k.TimeID)) 
    select i).ToList(); 

또는 : meeting.AllowedTimes 때문에 TimeID 1, 5 또는 6이없는 그래서 예를 반환하지 않습니다

대신 당신은이 작업을 수행 할 필요가

1

이 시도 :

var times = (from i in invitedUserAllowedTimes 
      where meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID)) 
      select i).ToList();