Asp.net LINQ to SQL-将日期和时间列合并为一个值
我正在尝试将此SQL语句转换为LINQ:Asp.net LINQ to SQL-将日期和时间列合并为一个值,asp.net,linq-to-sql,.net-4.6.1,Asp.net,Linq To Sql,.net 4.6.1,我正在尝试将此SQL语句转换为LINQ: 从sometable中选择sessionid、userid、CAST(sessiondate作为DATETIME)+CAST(sessiontime作为DATETIME)作为sessiondatetime 其中,sessiondate为日期类型,sessiontime为时间类型 我尝试了以下方法: var query=来自表中的会话 选择新的 { 会话Id, session.UserId, DateTime=会话。日期+会话。时间 }; 其中,tab
从sometable中选择sessionid、userid、CAST(sessiondate作为DATETIME)+CAST(sessiontime作为DATETIME)作为sessiondatetime
其中,sessiondate
为日期类型,sessiontime
为时间类型
我尝试了以下方法:
var query=来自表中的会话
选择新的
{
会话Id,
session.UserId,
DateTime=会话。日期+会话。时间
};
其中,table
是对DataContext
实例的GetTable()调用的返回值,Session
类将sessionid
映射到Id
,userid
,sessiondate
映射到DateTime),和sessiontime
到Time
(TimeSpan)
LINQ被转换为这条相当长的SQL语句:
选择[t0].[sessionid]作为[Id],[t0].[userid]作为[userid],转换(DateTime,DATEADD(小时,DATEPART(小时,[t0].[sessiontime]),转换(DateTime,DATEADD(分钟,DATEPART(分钟,[t0].[sessiontime]),转换(DateTime,DATEADD(秒,[t0].[sessiontime]),转换(DateTime,DateTime,DATEPART(毫秒,[t0])。[sessiontime],[t0]。[sessiondate]()()()()()())()())作为[
不幸的是,当试图执行该语句时,它告诉我“数据类型date的date函数dateadd不支持datepart毫秒。”我猜它对使用毫秒进行的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)
};
您是在尝试对sesstiondate
和sessiontime
列值求和,还是只是尝试将它们格式化以一起显示?我正在尝试求和并在稍后使用它们进行比较。我完全忘了提到我使用的是可为空的值,所以我一直在使用session.Date.Value
和session.Time.Value
,which不能正确地使用这个答案。但是,强制转换为不可为空的类型而不是使用.Value
,效果非常好!这远不是有史以来最漂亮的东西,但它确实有效。