【发布时间】:2015-03-20 07:49:42
【问题描述】:
我有一个表,其中包含两列,例如具有 varchar 数据类型的 BookingArrivedEnquiredTime 和日期时间 BookingArrivedEnquiredDateTime。当我在 SQL Server 中执行此查询时,结果与时间排序顺序完美 sql 查询会像
select BookingArrivedEnquiredTime from BookingArriveds where BookingArrivedEnquiredDateTime='2015-02-17 00:00:00.000'
order by CAST(('01/01/2000 ' + BookingArrivedEnquiredTime) AS DATETIME)
它会像这样输出
11:27 AM
11:47 AM
11:53 AM
12:13 PM
12:50 PM
02:02 PM
02:47 PM
03:04 PM
03:16 PM
当我尝试使用 linq 进行此查询时
public ViewResult Index1(DateTime? Startdate)
{
Startdate = DateTime.Now.Date;
var fm = DateTime.Parse("01/01/2000");
var qr = from item in db.BookingArriveds
where item.BookingArrivedEnquiredDateTime == Startdate
orderby DateTime.Parse("01/01/2000 " +
item.BookingArrivedEnquiredTime.ToString())
select item;
return View(qr);
}
但它会给出这样的错误
LINQ to Entities 无法识别方法 'System.DateTime Parse(System.String)' 方法,并且无法翻译此方法 进入商店表达式。
哪里出了问题,我需要帮助来了解如何将上面的 sql 查询重写为 linq 查询,同时在 linq 中从 varchar 转换为 datetime?
【问题讨论】:
-
您正在尝试编写一个将在 SQL 中执行的查询,但您正在使用像
DateTime.Parse()这样的 C# 方法,SQL 无法识别它们。 -
ok omri ,但是如何在 linq 中编写这个查询?
-
为什么不稍后解析呢?无论如何,您都可以通过
item.BookingArrivedEnquiredTime订购,因为您使用的前缀日期是相同的,因此仅使用日期而不使用它的订购应该提供相同的结果。 -
我试过了,但它给出的结果类似于晚上 11 点、上午 10 点、下午 7 点、上午 6 点,它仅按数字排序,而不是基于上午/下午排序
-
所以......您认为可能不是创建一个全新的 DateTime(例如 DateTime.Parse),而是使用您已经使用的那个有...
标签: c# asp.net-mvc linq entity-framework