如何重构这个EF Core查询以添加另一个where条件变量



下面有一个查询,它在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();

最新更新