1

我有 2 个收藏集-writtenUserAllowedTimesmeeting.AllowedTimes。集合受邀用户AllowedTimes具有集合受邀用户AllowedTimes.Times

集合邀请UserAllowedTimes.Times具有值 TimeID = 1、TimeID = 2、TimeID = 3、TimeID = 4、TimeID = 5、TimeID = 6。

集合meeting.AllowedTimes的值 TimeID = 2、TimeID = 3、TimeID = 4。

我想从包含所有meeting.AllowedTimes TimeIDs 的受邀用户AllowedTimes中选择所有记录。我尝试执行以下操作:

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

但没有记录。为什么?我的代码中有什么不正确的地方?

4

2 回答 2

1

试试这个:

var times = (from i in invitedUserAllowedTimes 
             where meeting.AllowedTimes.All(k => i.Times.Contains(k.TimeID))
             select i).ToList();
于 2013-03-01T15:19:15.457 回答
1

它没有返回任何东西,因为您要求它返回所有时间所在的invitedUserAllowedTimes位置。因此,您的示例不会返回它,因为没有 TimeID 1、5 或 6。meeting.AllowedTimesmeeting.AllowedTimes

相反,您需要这样做:

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();
于 2013-03-01T15:20:19.947 回答