2013-03-01 53 views
1

我有2個系列 - invitedUserAllowedTimesmeeting.AllowedTimes。收藏invitedUserAllowedTimes已收藏inviteUserAllowedTimes.TimesLINQ - 多對多

收集invitedUserAllowedTimes.Times具有值TIMEID = 1,TIMEID = 2,TIMEID = 3,TIMEID = 4,TIMEID = 5,TIMEID = 6

收集meeting.AllowedTimes具有值TIMEID = 2,TIMEID = 3,TIMEID = 4

我想從invitedUserAllowedTimes的所有記錄,裏面有所有meeting.AllowedTimes TimeIDs選擇。 我嘗試做以下操作:

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它不返回任何東西。所以,你的例子將不會返回它,因爲meeting.AllowedTimes沒有TIMEID 1,5或6

相反,你需要這樣做:

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

或者,使用擴展方法:

var times = invitedUserAllowedTimes.Where(i => meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID)).ToList(); 
1

試試這個:

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