如何在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();'