如何在EF查询中执行date比较?

请帮忙。 我想弄清楚如何使用DATE或DATETIME在linq查询进行比较。

例如:如果我想为今天之前开始的所有员工名称,我会在SQL中做这样的事情:

SELECT EmployeeNameColumn FROM EmployeeTable WHERE StartDateColumn.Date <= GETDATE() //Today 

但是linq呢?

 DateTime startDT = //Today var EmployeeName = from e in db.employee where e.StartDateColumn <= startDT 

上面的WHERE不起作用:

exception详细信息:System.NotSupportedException:LINQ to Entities不支持指定的types成员“Date”。 仅支持初始化器,实体成员和实体导航属性。

这应该工作。 你确定没有触发exception的查询的另一部分? 我有几个查询的forms的实例

 var query = from e in db.MyTable where e.AsOfDate <= DateTime.Now.Date select e; 

在我的代码。

使用DbFunctions类来修剪时间部分。

 using System.Data.Entity; var bla = (from log in context.Contacts where DbFunctions.TruncateTime(log.ModifiedDate) == DbFunctions.TruncateTime(today.Date) select log).FirstOrDefault(); 

资料来源: http : //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84d4e18b-7545-419b-9826-53ff1a0e2a62/

这可能是由于数据库中的date是可空的。 尝试这个:

 var EmployeeName = from e in db.employee where e.StartDateColumn.Value <= startDT 

你可以像这样检查条件

 var nextDay = DateTime.Today.AddDays(1); var query = from e in db.MyTable where e.AsOfDate >= DateTime.Today && e.AsOfDate < nextDay select e; 

在今天(00:00:00)和明天(00:00:00)之间检查,我们将在今天的datelogging中获得AsOfDatedate的logging。

你不能使用.Date

如果你想今天检查,你可以创build一个没有时间的date时间

 DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); var e = (from mds in myEntities.Table where mds.CreateDateTime >= myDate select mds).FirstOrDefault(); 

尝试这个:

 DateTime dd = DateTime.Parse("08/13/2010 00:00:00"); var data = from n in ContributionEligibilities where n.ModifiedDateTime.Date >= DateTime.Parse("08/13/2010").Date select n; data.Dump("Result") ; 

当你传递'DateTime'时,我很好奇错误信息'Date' 'DateTime' 。 难道说'StartDateColumn'实际上是一个'Date' ,而不是数据库中的'DateTime' ? 这可能会弄乱比较…

使用本地variables来存储Date值,然后在查询中使用该variables:

DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme

我正在使用一个LinqDataSource,我有问题让我的查询与date比较在其中执行没有错误。 答案是使用WhereAddParameters函数并将testing值作为强types参数添加。

查看下面的示例,我在匹配一个groupid,并检查我的logging中的StopDate是否大于或等于现在的date/时间戳。

我目前正在使用这个代码片段,它像一个魅力。

 LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString()) LinqCampaigns.Where = "GroupId = " & myGrp & " && " & "StopDate >= @StopDate" 

奇迹般有效….

。date没有工作,但是.Day为我做了。

 var query = from o in Payments where o.Order.OrderDate.Day != o.PaymentDate.Day orderby o.Order.OrderDate select new { o.Order.OrderID, o.Order.OrderDate, o.PaymentDate, o.Order.FirstName, o.Order.LastName, o.Order.CustomerID }; query.Dump(); 

确保你检查这样的空值:

  '(from mm in _db.Calls where mm.Professionnal.ID.Equals(proid) && mm.ComposedDate.HasValue && (mm.ComposedDate.Value >= datemin) && (mm.ComposedDate.Value <= date) select mm).ToArray();'