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)
Эта хранимая процедура возвращает:
Даты являются динамическими, в зависимости от помощи класса
Я не использую 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Вопрос в том, как вы называете процедуру, если запрос всегда будет давать мне разное количество дат, могу ли я создать общую модель?