C# 在LINQ中使用DateTime到实体

C# 在LINQ中使用DateTime到实体,c#,datetime,linq-to-entities,C#,Datetime,Linq To Entities,我有一个PostgreSQL数据库,它首先通过实体框架代码与程序交互 数据库包含一个表“users”,该表的列“visit”类型为DateTime 该应用被描述为: public class Users { ... [Required] [Column("visit")] public DateTime VisitDate ... } 我正在尝试运行此查询 var rslt = context.Visitors.Where(v => v.VisitD

我有一个PostgreSQL数据库,它首先通过实体框架代码与程序交互

数据库包含一个表“users”,该表的列“visit”类型为DateTime

该应用被描述为:

public class Users
{    ...
    [Required]
    [Column("visit")]
    public DateTime VisitDate
    ...
}
我正在尝试运行此查询

var rslt = context.Visitors.Where(v => v.VisitDate.Date == DateTime.Now.Date).ToList()
但是得到一个异常:
NotSupportedException


出什么问题了?

问题在于LINQ提供程序正在尝试将
DateTime.Now.Date
转换为数据库方法,默认情况下它无法这样做。进行日期比较的诀窍是创建一个时间组件设置为默认值的
DateTime
实例。您可以获取更多信息和信息。

DateTime。不支持Date
属性。你必须用方法来代替。在生成的SQL查询中,它将以
DATEPART
TSQL
方法结束

var rslt = context.Visitors
                  .Where(v => SqlFunctions.DatePart("year", v.VisitDate) == SqlFunctions.DatePart("year", DateTime.Now))
                  .Where(v => SqlFunctions.DatePart("dayofyear", v.VisitDate) == SqlFunctions.DatePart("dayofyear", DateTime.Now))
                  .ToList(); 

使用类EntityFunction修剪时间部分

using System.Data.Objects;    

var bla = (from log in context.Contacts
           where EntityFunctions.TruncateTime(log.ModifiedDate) ==  EntityFunctions.TruncateTime(today.Date)
           select log).FirstOrDefault();
来源:

Mayur Borad的答案(比公认的答案更准确)已经过时:

System.Data.Entity.Core.Objects.EntityFunctions
已过时。您应该改用
System.Data.Entity.DbFunctions

var today = DateTime.Today; // (Time already removed)

var bla = context.Contacts
    .FirstOrDefault(x => DbFunctions.TruncateTime(x.ModifiedDate) == today);

您可以发布异常的内部详细信息吗?您可以使用
var rslt=context.Visitors.Where(v=>v.VisitDate.Date==DateTime.Now).ToList()
@saravanan我想您的意思可能是
DateTime.Today
而不是
DateTime.Now
?谢谢您的回答,但我不会再收到异常的支持。但消息包含其他信息:在类型“System.Data.Objects.SqlClient.SqlFunctions”上指定的方法“System.Nullable
1[System.Int32]DatePart(System.String,System.Nullable
1[System.DateTime])“无法转换为LINQ到实体存储表达式。可能是PostgreSQL的问题?请参阅下面Tim s的答案,了解使用DbFunctions的最新实现