10

我需要在使用 lambda 表达式的 linq 查询中调用 ToShortDateString:

toRet.Notification = Repositories
    .portalDb.portal_notifications.OrderByDescending(p =>       p.id)
    .FirstOrDefault(p => p.date.ToShortDateString() == shortDateString);

但我得到了错误:

System.Data.Entity.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理

附加信息:LINQ to Entities 无法识别方法“System.String ToShortDateString()”方法,并且此方法无法转换为存储表达式。

考虑到我确实需要使用,我能做ToShortDateString()什么?

谢谢。

4

4 回答 4

24

Linq to Entities 无法将ToSortDateString方法转换为 SQL 代码。你不能在服务器端调用它。将过滤移动到客户端(这会将所有数据从服务器传输到客户端),或者考虑使用服务器端函数来获取日期的一部分(你应该传递DateTime对象而不是shortDateString):

EntityFunctions.TruncateTime(p.date) == dateWithoutTime
于 2013-07-15T13:26:16.910 回答
5

当您使用的是日期/时间数据时,您不应该强制进行字符串比较 - 一旦您强制进行字符串比较,您就会突然不得不处理字符串的格式。

相反,有类似的东西:

var endDate = targetDate.AddDays(1);

toRet.Notification = Repositories
.portalDb.portal_notifications.OrderByDescending(p =>       p.id)
.FirstOrDefault(p => p.date >= targetDate && p.date < endDate);

(假设这是您在代码中用于生成的targetDate任何变量,并且已经是没有时间值的变量)DateTimeshortDateStringDateTime

于 2013-07-15T13:32:27.893 回答
0

尝试这个,

您也可以使用以下代码。

Activity = String.Format("{0} {1}", String.Format("{0:dd-MMM-yyyy}", s.SLIDESHEETDATE), String.Format("{0:HH:mm}", s.ENDDATETIME))
于 2013-07-15T13:40:36.193 回答
-3

ToShortDateString()方法通常只使用日期并忽略时间戳。

通过使用以下查询,您将获得准确的今天结果集。

Repositories.portalDb.portal_notifications.OrderByDescending(p =>       p.id)
        .FirstOrDefault(p => p.date.Date == DateTime.Now.Date);

通过使用structDate的属性,DateTime您只能获取该日期的记录。

注意:Linq to Objects。仅当您可以(或可以选择)绕过ToShortDateString()方法时才有效

于 2014-12-03T09:20:02.903 回答