下面有一个查询,它在SenderId或ReceiverId列中查找用户id的传输。
// transferParams.Transfer = null,1,2
var transfersCount = await _dbContext.Transfers
.Where(p =>
(p.SenderId == userFromRepo.Id || p.ReceiverId == userFromRepo.Id) &&
(!transferParams.Status.HasValue || p.TransferStatus == (TransferStatus)transferParams.Status) &&
(!transferParams.Type.HasValue || p.TransferType == (TransferType)transferParams.Type))
.CountAsync();
我现在在控制器中传递了另一个名为"Transfer"的参数,它是一个可以为null的Int,其中1是Received,2是Sent。
我需要重构查询,这样,如果传入的传输参数为null,我仍然会同时查看这两列(ReceiverId、SenderId(,但如果是1,则我只会查看ReceiverId列,如果是2,则只会查看SenderId列。
有人能告诉我怎么做吗?
var baseQuery = _dbContext.Transfers.AsQueryable();
switch(transfer)
{
case 1:
baseQuery = baseQuery.Where(p => p.ReceiverId == user.Id);
break;
case 2:
baseQuery = baseQuery.Where(p => p.SenderId == user.Id);
break;
default:
baseQuery = baseQuery.Where(p => p.ReceiverId == user.Id || p.SenderId == user.Id);
break;
}
if (transferParams.Status.HasValue)
baseQuery = baseQuery.Where(p=> p.TransferStatus == (TransferStatus)transferParams.Status);
if (transferParams.Type.HasValue)
baseQuery = baseQuery.Where(p => p.TransferType == (TransferType)transferParams.Type);
var transferCount = await baseQuery.CountAsync();