簡體   English   中英

如何在EF查詢中執行日期比較?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM