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 ...
正常に動作しますが、1 つの例外があります。ユーザーが 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)
))) &&
作品
なぜ?