Общая модель для вызова хранимой процедуры .net core - PullRequest
0 голосов
/ 02 октября 2018
ALTER PROCEDURE [dbo].[ListaUnidadAlumnos]
    @MateriaId INT,
    @UnidadId INT,
    @Columnas AS NVARCHAR(MAX) = Null,
    @Query AS NVARCHAR(MAX) = Null
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        @Columnas = STUFF((SELECT ',' + QUOTENAME(convert(char(10), L.Fecha, 120)) 
                           FROM (SELECT DISTINCT(A.Fecha)
                                 FROM Asistencias A
                                 INNER JOIN AspNetUsers U ON A.AlumnoId = U.Id
                                 INNER JOIN Unidades UN ON UN.UnidadId = A.UnidadId
                                 INNER JOIN Materias M ON UN.MateriaId = M.MateriaId
                                 WHERE UN.MateriaId = @MateriaId
                                   AND UN.UnidadId = @UnidadId) L
                           GROUP BY L.Fecha
                           ORDER BY L.Fecha asc
                           FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

    SET @Query = 'SELECT AlumnoId, ' + @Columnas + ' from 
         (
            SELECT A.AlumnoId, A.Fecha, A.Valor
            FROM Asistencias A
            INNER JOIN AspNetUsers U ON A.AlumnoId = U.Id
        ) x
        pivot 
        (
            max(Valor)
            for Fecha in (' + @Columnas + ')
        ) p '

    EXECUTE(@query)

Эта хранимая процедура возвращает:

Result of stored procedure

Даты являются динамическими, в зависимости от помощи класса

Я не использую Entity Framework, Я выполняю процедуры следующим образом

public async Task ObtenerListaMateria(int materiaId)
{
    var pMateriaId = new SqlParameter("@MateriaId", materiaId);

    ListaAlumnosIdMateria = await _context.ListaAlumnosIdMateria
            .FromSql("EXEC ObtenerListaAlumnosIdMateria @MateriaId", pMateriaId)
            .ToListAsync();

    ViewData["NumeroAlumnos"] = ListaAlumnosIdMateria.Count();
    ViewData["Contador"] = 0;
}

Если я выполняю процедуры таким образом, сначала мне нужно создать модель с данными, которые они видят в процедуре

MyВопрос в том, как вы называете процедуру, если запрос всегда будет давать мне разное количество дат, могу ли я создать общую модель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...