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

Nea*_*alR 10 linq datetime entity-framework 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;
Run Code Online (Sandbox Code Playgroud)

Iro*_*n84 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;
Run Code Online (Sandbox Code Playgroud)


صفي*_*صفي 12

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

防爆.

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B")
Run Code Online (Sandbox Code Playgroud)

像魅力一样工作.

UPDATE

只有通过LINQ查询实体时,此功能才有效.不要在LINQ-Object中使用.

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

  • 在EF6中不推荐使用EntityFunctions,而应使用DbFunctions. (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();
Run Code Online (Sandbox Code Playgroud)