处理 API / 存储过程数据重复

问题描述 投票:0回答:1

存储过程:

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 倍。请协助解决此问题,或者如果我需要添加任何其他上下文。谢谢你。

c# sql-server asp.net-core asp.net-web-api stored-procedures
1个回答
0
投票

尝试使用 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
        });
© www.soinside.com 2019 - 2024. All rights reserved.