У меня есть хранимая процедура, которая обеспечивает другой результат в зависимости от входного параметра. Мне нужно выполнить процедуру и привести результат в таблицу данных для отображения в сетке. Как я могу это сделать? Нужно ли создавать модель для всех результатов или есть какой-то общий способ сделать это?
--There are lots of report type. Just listed 2 of them for now
CREATE PROCEDURE [dbo].[uspGetAdminReportData]
@reportType VARCHAR(50)
AS
BEGIN
IF(@reportType = 'TOTAL_BY_DATE')
BEGIN
SELECT CONVERT(VARCHAR, DATE_SENT, 111) AS Date_Sent, FORMAT(DATE_SENT, 'dddd') AS Day_Of_Week, COUNT(*) AS Email_Count FROM TBLDATA1 WITH(NOLOCK) GROUP BY DATE_SENT
END
ELSE IF (@reportType = 'USER_LOGIN_LOGOUT_REPORT')
BEGIN
SELECT UserName, CONVERT(VARCHAR(10), [LOGIN], 111) AS LOGIN_DATE, CONVERT(VARCHAR(3),(SUM(DATEDIFF(MINUTE,[LOGIN],[LOGOUT]))/60)) + ':' + RIGHT('00' + CONVERT(VARCHAR(3),(SUM(DATEDIFF(MINUTE,[LOGIN],[LOGOUT])) - (SUM(DATEDIFF(MINUTE,[LOGIN],[LOGOUT]))/60) * 60)),2) AS TOTAL_TIME FROM USERAUDIT WITH(NOLOCK)
INNER JOIN
UserRecords WITH(NOLOCK) ON UserAudit.UserId = UserRecords.UserId
Where DateDiff(Minute, [Login], [LOGOUT]) > 0
GROUP BY UserRecords.UserName, CONVERT(VARCHAR(10), [LOGIN], 111)
ORDER BY UserRecords.UserName, CONVERT(VARCHAR(10), [LOGIN], 111)
END
END
C# code
public virtual DataTable GetAdminReportData(ReportType reportType)
{
//not sure how to get the result executing the procedure for various report types. Need to execute the procedure, and cast the result as a data table and return to load table to the grid using entity framework
SqlParameter ReportType = new SqlParameter("reportType", reportType.ToString());
var result = this.Database.SqlQuery<object>("uspGetAdminReportData @reportType", ReportType);
}