我當前正在查詢msdb.dbo.sysjobhistory
表以查找當前執行的作業的狀態並在瀏覽器中顯示它們。該表的定義如下所示。 將表示爲INT的時間和日期轉換爲LINQ中的DateTime結構
run_date
這裏並對應的日期和時被執行特定作業都表示爲當然int
時間。我試圖從這些屬性中構造一個DateTime
類型,以便在單個列中而不是兩個單獨的列中查看它。
例
run_date = 20161125
run_time = 33000
runStartTime = 2016-11-25 03:30:00
我已經定義視圖模型類是
public class ExecutedJobsViewModel
{
public string jobName { get; set; }
public int stepID { get; set; }
public string stepName { get; set; }
public string message { get; set; }
public DateTime runStartTime { get; set; }
public int runStatus { get; set; }
public int runDuration { get; set; }
}
和取出這個數據是
private async Task<List<ExecutedJobsViewModel>> getExecutedJobs()
{
using(var context = new SysTableEntity())
{
return await (from job in context.sysjobs
join history in context.sysjobhistories
on job.job_id equals history.job_id
select new ExecutedJobsViewModel
{
jobName = job.name,
message = history.message,
stepID = history.step_id,
stepName = history.step_name,
runStatus = history.run_status,
runDuration = history.run_duration,
runStartTime = // Bind data here
}).ToListAsync();
}
}
我能想到的唯一解決方案的代碼是DbFunctions.CreateDateTime(int? years, int? months, int? days, int? hours, int? minutes, int? seconds)
這是太多的工作k假設int
必須轉換爲string
,然後找到子字符串,然後再轉換回int
。此外,處理像33000
這樣的邊緣情況,它是五位數字,而不是以六位數字表示的時間(183000
)。
你能提出一個更簡單的方法來實現這一點。
將數據作爲整數向下拉,然後將它們轉換爲客戶端上的DateTime。 – sgmoore
您可以在模型中導入dbo.agent_datetime函數並使用它。 – Evk