存储过程:
ALTER PROCEDURE [dbo].[GetApprovalLogs]
@AgentCode VARCHAR(20)
AS
BEGIN
SELECT DISTINCT
[APPROVAL_TYPE],
[REQUESTER_AGENT_CODE],
[APPROVER_AGENT_CODE],
[TIMESTAMP],
[STATUS_FLAG],
[DATE_CREATED],
[DATE_CLOSED],
[APPROVAL_ID],
[REF_KEY]
FROM [dbo].[APPROVAL_LOGS]
WHERE [APPROVER_AGENT_CODE] = @AgentCode
AND [STATUS_FLAG] = 0
AND [REQUESTER_AGENT_CODE] IS NOT NULL
END
API:
[HttpGet("GetPendingLogs")]
public IActionResult GetPendingLogs(string agentCode)
{
try
{
var approvalLogs = _context.APPROVAL_LOGS
.FromSqlRaw("EXEC GetApprovalLogs @AgentCode", new SqlParameter("@AgentCode", agentCode))
.ToList();
if (approvalLogs == null || approvalLogs.Count == 0)
{
return NotFound("No pending approval logs found.");
}
var cLogs = _context.SP_GET_C_LOG
.FromSqlRaw("EXEC GetCLogs @AgentCode", new SqlParameter("@AgentCode", agentCode))
.ToList();
var combinedData = new
{
ApprovalLogs = approvalLogs.Select(log => new
{
ApprovalType = log.APPROVAL_TYPE,
RequesterAgentCode = log.REQUESTER_AGENT_CODE,
ApproverAgentCode = log.APPROVER_AGENT_CODE,
Timestamp = log.TIMESTAMP,
StatusFlag = log.STATUS_FLAG,
DateCreated = log.DATE_CREATED,
DateClosed = log.DATE_CLOSED,
RefKey = log.REF_KEY
}).ToList(),
CLogs = cLogs
};
return Ok(combinedData);
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while getting logs.");
if (ex.InnerException != null)
{
_logger.LogError(ex.InnerException, "Inner exception details:");
}
throw;
}
}
我的 API 获取我的日志,但不会循环访问它们,它获取表中的第一个日志,并按表中可用日志的数量返回它,因此,例如,我得到的是第一个日志,而不是获取 3 个不同的请求请求乘以 3 倍。请协助解决此问题,或者如果我需要添加任何其他上下文。谢谢你。
尝试使用 ForEach 而不是 Select,如下例所示。
approvalLogs.ForEach(log => new
{
ApprovalType = log.APPROVAL_TYPE,
RequesterAgentCode = log.REQUESTER_AGENT_CODE,
ApproverAgentCode = log.APPROVER_AGENT_CODE,
Timestamp = log.TIMESTAMP,
StatusFlag = log.STATUS_FLAG,
DateCreated = log.DATE_CREATED,
DateClosed = log.DATE_CLOSED,
RefKey = log.REF_KEY
});