[英]How do I perform Date Comparison in EF query?
請幫忙。 我試圖弄清楚如何在linq查詢中使用DATE或DATETIME進行比較。
示例:如果我想要在今天之前啟動的所有員工姓名,我會在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不起作用:
異常詳細信息:System.NotSupportedException:LINQ to Entities中不支持指定的類型成員“Date”。 僅支持初始值設定項,實體成員和實體導航屬性。
使用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/
這應該工作。 您確定查詢的其他部分沒有觸發異常嗎? 我有幾個表單查詢實例
var query = from e in db.MyTable
where e.AsOfDate <= DateTime.Now.Date
select e;
在我的代碼中。
這可能是由於數據庫中的日期可以為空。 試試這個:
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)和tommorow(00:00:00)之間檢查時,您將獲得AsOfDate日期的記錄,我們將獲得今天的日期記錄...
你不能使用.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'
時,我很想知道'Date'
的錯誤信息。 可能是'StartDateColumn'
實際上是'Date'
,而不是數據庫中的'DateTime'
? 這可能搞砸了比較......
試試這個:
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") ;
我正在使用LinqDataSource,我在使用日期比較查詢時遇到問題,無錯誤地執行。 答案是使用WhereAddParameters函數並將測試值添加為強類型參數。
請參閱下面的示例,其中我匹配groupid並檢查我的記錄中的StopDate是否大於或等於now的時間戳。
我目前正在使用這個代碼片段,它就像一個魅力。
LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString())
LinqCampaigns.Where = "GroupId = " & myGrp & " && " & "StopDate >= @StopDate"
奇跡般有效....
使用局部變量存儲Date值,然后在查詢中使用該變量:
DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme
確保您檢查null值,如下所示:
'(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();'
.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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.