【发布时间】:2013-10-09 01:50:53
【问题描述】:
我正在尝试在 Linq to Entities 中创建一个查询。我希望它返回包含从我正在查询的表中的字符串派生的 DateTime 属性的对象。数据(在 SQL Server 中)有一个名为 date_occurred 的字符串日期字段(在数据库中显示为 VARCHAR(8))。它有一个名为 time_occurred 的字符串时间字段 (varchar(6))。
date_occurred 的内容示例为“20131007”,表示 2013 年 10 月 7 日。time_occurred 的内容示例为“145710”,表示下午 2:57 后 10 秒。
我尝试了两种不起作用的方法:
Dim ATQuery = From e In EntityContext.vwSecAppAuditToday
Order By e.date_occurred, e.time_occurred
Select New AuditEntry With {
.EventTime = DateTime.ParseExact(Trim(e.date_occurred) & Trim(e.time_occurred), "yyyyMMddHHmmss", CultureInfo.InvariantCulture),
.ServerName = e.server_name
}
这会引发 NotSupportedException 并显示一条消息:“LINQ to Entities 无法识别方法 'System.DateTime ParseExact(System.String, System.String, System.IFormatProvider)' 方法,并且无法翻译此方法到商店表达式中。”
在此之前,我尝试过:
Dim ATQuery = From e In EntityContext.vwSecAppAuditToday
Order By e.date_occurred, e.time_occurred
Select New AuditEntry With {
.EventTime = New DateTime(Integer.Parse(e.date_occurred.Substring(0, 4)),
Integer.Parse(e.date_occurred.Substring(4, 2)),
Integer.Parse(e.date_occurred.Substring(6, 2)),
Integer.Parse(e.time_occurred.Substring(0, 2)),
Integer.Parse(e.time_occurred.Substring(2, 2)),
Integer.Parse(e.time_occurred.Substring(4, 2))),
.ServerName = e.server_name
}
这也会引发NotSupportedException。在这种情况下,消息指出:“LINQ to Entities 中仅支持无参数构造函数和初始化程序。”
我正在尝试使用 Linq to Entities 来实现吗?
编辑:评论提醒
对于那些后来阅读这篇文章的人来说,Moho 和 Matt Johnson 制作了特别有用的 cmets。我已将这些标记为 +1。
【问题讨论】:
-
你能告诉我们
e.date_occured和e.time_occured的内容吗? -
很好的建议。我会编辑帖子。谢谢!
-
您使用的是什么数据库,您使用的列是什么数据库类型?
-
是否有某些原因您不能使用正确的 SQL 数据类型,例如
DATETIME? -
应该可以。请务必在该视图上为已翻译的列添加索引。
标签: vb.net linq entity-framework