我在下面有這個查詢,它在 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”的引數,它是一個可為空的 Int,其中 1 是 Received,2 是 Sent。
我需要重構查詢,以便如果傳入的傳輸引數為空,我仍然會查看兩列(ReceiverId,SenderId),但如果它是 1,那么我將只查看 ReceiverId 列,如果 2 只查看SenderId 列。
誰能告訴我該怎么做?
uj5u.com熱心網友回復:
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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422277.html
標籤:
