Я пытаюсь перевести этот оператор SQL в LINQ:
SELECT sessionid, userid, CAST(sessiondate AS DATETIME) + CAST(sessiontime AS DATETIME) AS sessiondatetime FROM sometable
где sessiondate
относится к типу DATE
, а sessiontime
относится к типу TIME
.
Я пробовал следующее:
var query = from session in table
select new
{
session.Id,
session.UserId,
DateTime = session.Date + session.Time
};
где table
— это возвращаемое значение вызова GetTable<Session>()
для экземпляра DataContext
, а класс Session
сопоставляет sessionid
с Id
, userid
с UserId
, sessiondate
с Date
(DateTime) и sessiontime
с Time
(TimeSpan).
LINQ преобразуется в этот довольно длинный оператор SQL:
SELECT [t0].[sessionid] AS [Id], [t0].[userid] AS [UserId], CONVERT(DateTime,DATEADD(HOUR, DATEPART(HOUR, [t0].[sessiontime]), CONVERT(DateTime,DATEADD(MINUTE, DATEPART(MINUTE, [t0].[sessiontime]), CONVERT(DateTime,DATEADD(SECOND, DATEPART(SECOND, [t0].[sessiontime]), CONVERT(DateTime,DATEADD(MILLISECOND, DATEPART(MILLISECOND, [t0].[sessiontime]), [t0].[sessiondate])))))))) AS [DateTime] FROM [sometable] AS [t0]
К сожалению, при попытке выполнить этот оператор он сообщает мне, что «миллисекунда datepart не поддерживается функцией даты dateadd для даты типа данных». Я предполагаю, что он недоволен вызовом DATEADD
с миллисекундами. Есть ли способ исправить это?
Изменить: обратите внимание, что и session.Date
, и session.Time
могут принимать значение NULL.
sesstiondate
иsessiontime
или просто пытаетесь отформатировать их для совместного отображения? - person Mohsin Mehmood   schedule 12.02.2019