LINQ to SQL - 将日期和时间列合并为一个值
LINQ to SQL - Combine date and time columns into a single value
我正在尝试将此 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
是 DataContext
实例上的 GetTable<Session>()
调用的 return 值,Session
class 映射 sessionid
到 Id
、userid
到 UserId
、sessiondate
到 Date
(日期时间),以及 sessiontime
到 Time
(时间跨度)。
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]
不幸的是,在尝试执行该语句时,它告诉我 "The datepart millisecond is not supported by date function dateadd for data type date." 我猜它对 DATEADD
毫秒调用不满意。有办法解决这个问题吗?
编辑: 注意 session.Date
和 session.Time
都可以为空。
那个不幸的数据结构使代码不幸丑陋:
var query = from session in table
select new
{
session.id,
session.userid,
combinedDate = new DateTime(
session.Date.Year, session.Date.Month, session.Date.Day,
session.Time.Hour, session.Time.Minute, session.Time.Second,
session.Time.Millisecond)
};
我正在尝试将此 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
是 DataContext
实例上的 GetTable<Session>()
调用的 return 值,Session
class 映射 sessionid
到 Id
、userid
到 UserId
、sessiondate
到 Date
(日期时间),以及 sessiontime
到 Time
(时间跨度)。
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]
不幸的是,在尝试执行该语句时,它告诉我 "The datepart millisecond is not supported by date function dateadd for data type date." 我猜它对 DATEADD
毫秒调用不满意。有办法解决这个问题吗?
编辑: 注意 session.Date
和 session.Time
都可以为空。
那个不幸的数据结构使代码不幸丑陋:
var query = from session in table
select new
{
session.id,
session.userid,
combinedDate = new DateTime(
session.Date.Year, session.Date.Month, session.Date.Day,
session.Time.Hour, session.Time.Minute, session.Time.Second,
session.Time.Millisecond)
};