我有 2 张桌子:'AllowedDates'
- DayID int PK
- Day datetime
'允许时间'
- TimeID int PK
- DayID int FK
- Hour int
- Minute int
我也有表“用户”:
- ID int PK
- FirstName nvarchar(max)
...
和表'UserDeniedTimes':
DayID int FK
UserID int FK
Hour int
Minute int
我需要为具体的 DayID/Hour/Minute 选择没有拒绝时间(在 UserDeniedTimes 中记录)的用户
我尝试执行以下操作:
var result = from i in _dbContext.Users
where i.UserDeniedTimes.All(
p => (!p.AllowedDate.AllowedTimes.Any(
a1 => a1.DayID == aTime.DayID
&& a1.Hour == aTime.Hour
&& a1.Minute == aTime.Minute
))
)
select new ...
它工作正常,但有一个例外。如果用户在某一天在 UserDeniedTimes 中有记录,但在另一天,该用户也不会被选中。例如,UserDeniedTimes 有记录:
DayID = 10
UserID = 20
Hour = 14
Minute = 30
如果 aTime 具有以下值,则不会选择此用户:
DayID = 10
Hour = 9
Minute = 30
但是如果 DayID = 11 则会被选中。为什么?
[添加] 当我仅按天限制时它可以正常工作:
var result = from i in _dbContext.Users
where i.UserDeniedTimes.All(
p => (!p.AllowedDate.AllowedTimes.Any(
a1 => a1.DayID == aTime.DayID
))
)
select new ...
但在我写的时候不起作用:
var result = from i in _dbContext.Users
where i.UserDeniedTimes.All(
p => (!p.AllowedDate.AllowedTimes.Any(
a1 => a1.Hour == 14
))
)
select new ...
为什么?魔术 DayID 和 Hour 有什么区别?
[添加#2]
((time == null) || i.UserDeniedTimes.All(p =>
//p.AllowedDate.AllowedTimes.Any(a1 => a1.DayID != 33) &&
(p.AllowedDate.AllowedTimes.Any(a2 => a2.Hour != 14)
))) &&
不工作
((time == null) || i.UserDeniedTimes.All(p =>
p.AllowedDate.AllowedTimes.Any(a1 => a1.DayID != 33) &&
//(p.AllowedDate.AllowedTimes.Any(a2 => a2.Hour != 14)
))) &&
作品
为什么?