2013-02-08 119 views
9

我只需要在涉及datetime字段的Linq查詢中僅比較日期。但是,語法如下導致以下錯誤消息使用Linq查詢將日期與DateTime字段進行比較

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

有誰知道如何提取剛剛日期了datetime場的?

var duplicate = from a in _db.AgentProductTraining 
       where a.CourseCode == course.CourseCode && 
       a.DateTaken.Date == course.DateTaken.Date && 
       a.SymNumber == symNumber 
       select a; 

回答

14

這似乎有點迂迴,但你可以使用SqlFunctions類這樣做DateDiff方法。只需傳入兩個值,然後使用「日」來查找它們之間的天數差異(如果它們在同一天應該爲0)。

類似如下:

from a in _db.AgentProductTraining 
       where a.CourseCode == course.CourseCode && 
       SqlFunctions.DateDiff("DAY", a.DateTaken, course.DateTaken) == 0 && 
       a.SymNumber == symNumber 
       select a; 
+0

如果日期在不同的日期,但是間隔時間不到一天,例如'2013年1月5日23:30:00'和'2013年1月6日01:30: 00'? – dasblinkenlight 2013-02-08 18:21:50

+0

我不這麼認爲:http://www.sqlteam.com/article/datediff-function-demystified – IronMan84 2013-02-08 18:25:40

+1

感謝您的鏈接! – dasblinkenlight 2013-02-08 18:34:07

1

試試這個

DateTime dt =course.DateTaken.Date; 
var duplicate = from a in _db.AgentProductTraining 
       where a.CourseCode == course.CourseCode && 
       a.DateTaken == dt && 
       a.SymNumber == symNumber 
       select a; 

如果a.DateTaken包含時間還,再參考這些鏈接修改日期。
Date屬性不能在LINQ To Entities中使用。

Compare Dates using LINQ to Entities (Entity Framework)

'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported

http://forums.asp.net/t/1793337.aspx/1

9

您可以使用EntityFunctions.TruncateTime()命名空間System.Data.Objects

防爆下。

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B") 

工程像魅力。

+0

實體框架中不受支持。 – 2014-01-17 03:44:48

+0

嘿@AlexAngas,你可以檢查以確認這是在EF4中工作。你使用的是哪個版本? – 2014-01-17 05:21:21

+0

我用EF5,得到這個異常:'系統。NotSupportedException:只能從LINQ to Entities調用此函數。在System.Data.Objects.EntityFunctions.TruncateTime(Nullable'1 dateValue)'。有什麼我失蹤? – 2014-01-17 06:16:19

6

你可以像波紋管:

var data1 = context.t_quoted_value.Where(x => x.region_name == "Pakistan" 
         && x.price_date.Value.Year == dt.Year 
         && x.price_date.Value.Month == dt.Month 
         && x.price_date.Value.Day == dt.Day).ToList(); 
-1

取下.Date 如果該字段是一個DateTime它可以用==

var duplicate = from a in _db.AgentProductTraining 
       where a.CourseCode == course.CourseCode && 
       a.DateTaken == course.DateTaken && 
       a.SymNumber == symNumber 
       select a; 
3

進行比較,你必須使用System.Data.Entity.DbFunctions.TruncateTime

相關問題