當前查詢(下一個)的問題是 if request.DepartmentId.HasValueis false。我想要做的基本上就是在“From”到“To”期間找到屬于 DepartmentId 和 RoomType 匹配的可用房間。
public async Task<Response> Handle(GetAvailableRoomsQuery request, CancellationToken cancellationToken)
{
// We are getting all class activities between From and To
var classActivities = await _sender.Send(
new GetClassActivitiesQuery
{
From = request.From,
To = request.To
}, cancellationToken);
// finding all unavailable rooms between From and To
var unavailableRoomIds = new HashSet<int>(classActivities.Select(e => e.RoomId));
return await _context.Rooms
.Where(room => !unavailableRoomIds.Contains(room.Id) &&
request.DepartmentId.HasValue && request.DepartmentId.Value == room.DepartmentId &&
request.RoomType.HasValue && request.RoomType.Value == room.Type)
.ProjectTo<RoomDto>(_mapper.ConfigurationProvider)
.ToListAsync(cancellationToken);
}
這是以前可以作業的查詢,但有 3 個 Where 陳述句。
public async Task<Response> Handle(GetAvailableRoomsQuery request, CancellationToken cancellationToken)
{
var classActivities = await _sender.Send(
new GetClassActivitiesQuery
{
From = request.From,
To = request.To
}, cancellationToken);
var unavailableRoomIds = new HashSet<int>(classActivities.Select(e => e.RoomId));
return await _context.Rooms
.Where(room => !unavailableRoomIds.Contains(room.Id))
.Where(room => !request.DepartmentId.HasValue || request.DepartmentId.Value == room.DepartmentId)
.Where(room => !request.RoomType.HasValue || request.RoomType.Value == room.Type)
.ProjectTo<RoomDto>(_mapper.ConfigurationProvider)
.ToListAsync(cancellationToken);
}
uj5u.com熱心網友回復:
正如@juharr 所提到的:
return await _context.Rooms
.Where(room => !unavailableRoomIds.Contains(room.Id))
.Where(room => !request.DepartmentId.HasValue || request.DepartmentId.Value == room.DepartmentId)
.Where(room => !request.RoomType.HasValue || request.RoomType.Value == room.Type)
應該相當于:
return await _context.Rooms
.Where(room => !unavailableRoomIds.Contains(room.Id)) &&
(!request.DepartmentId.HasValue || request.DepartmentId.Value == room.DepartmentId) &&
(!request.RoomType.HasValue || request.RoomType.Value == room.Type))
真的不明白為什么您將||s 更改為&&s 并洗掉了!s
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494613.html
上一篇:通過下拉串列過濾表的MVC顯示無
