使用Linq查询仅将日期与DateTime字段进行比较

时间:2013-02-08 18:11:53

标签: linq entity-framework datetime entity-framework-4

我只需要在涉及datetime字段的Linq查询中仅比较日期。但是,下面的语法会导致以下错误消息

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;

7 个答案:

答案 0 :(得分:15)

它似乎有点迂回,但您可以使用SqlFunctions类'DateDiff方法来执行此操作。只需传入两个值并使用“Day”查找它们之间的差异(如果它们在同一天,则应为0)。

如下所示:

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

答案 1 :(得分:12)

您可以在命名空间EntityFunctions.TruncateTime()

下使用System.Data.Objects

实施例

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

像魅力一样。

<强>更新

此功能仅在通过LINQ查询实体时有效。不要在LINQ-Object中使用。

对于EF6,请在System.Data.Entity命名空间下使用DbFunctions.TruncateTime()。

答案 2 :(得分: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();

答案 3 :(得分:3)

您必须使用System.Data.Entity.DbFunctions.TruncateTime

答案 4 :(得分:2)

试试这个

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

答案 5 :(得分:0)

这就是我通过做类似日期搜索的结果,我不得不考虑时间(小时和分钟部分)

from x in _db.AgentProductTraining
                where 
                       x.CreatedOn.Year == mydacourse.DateTakente.Year
                    && x.CreatedOn.Month == course.DateTaken.Month
                    && x.CreatedOn.Day == course.DateTaken.Day
                    && x.CreatedOn.Hour == course.DateTaken.Hour
                    && x.CreatedOn.Minute == course.DateTaken.Minute
                select x;

答案 6 :(得分:-1)

摘下.Date 如果该字段是DateTime,则可以与==

进行比较
var duplicate = from a in _db.AgentProductTraining
                where a.CourseCode == course.CourseCode &&
                a.DateTaken == course.DateTaken &&
                a.SymNumber == symNumber
                select a;