Как обрабатывать динамический результат от хранимой процедуры в рамках сущности? - PullRequest
1 голос
/ 01 апреля 2019

У меня есть хранимая процедура, которая обеспечивает другой результат в зависимости от входного параметра. Мне нужно выполнить процедуру и привести результат в таблицу данных для отображения в сетке. Как я могу это сделать? Нужно ли создавать модель для всех результатов или есть какой-то общий способ сделать это?

--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);

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