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

问题描述 投票:0回答:9

我只需要在涉及

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;
linq entity-framework datetime entity-framework-4
9个回答
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;

13
投票

可以在命名空间

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()。


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
投票

你必须使用

System.Data.Entity.DbFunctions.TruncateTime


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 中使用。

使用 LINQ to Entities(实体框架)比较日期

“日期”在 LINQ to Entities 中不受支持。仅支持初始化器、实体成员和实体导航属性

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


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;

0
投票

嘿,当我构建查询时,下面的这个有效

                    DateTime date = Convert.ToDateTime(SearchText); 
                    query = query.Where(x => x.Date.Month == date.Month
                                          && x.Date.Day == date.Day
                                          && x.Date.Year == date.Year);

// 让我知道这是否对您有用,因为它提取了为我搜索的日期


0
投票

有点难看,但它在不使用任何 sql 函数的情况下按预期工作:

var sessions = await Db.Set<Sessions>()
    .Where(x => x.Timetable == form.TimetableId)
    .Where(x => x.DateAndTimeOfSession >= form.BookingDate.Date) // <--
    .Where(x => x.DateAndTimeOfSession < form.BookingDate.Date.AddDays(1)) // <--
    .ToListAsync();

-1
投票

取消.Date 如果该字段是 DateTime,则可以与 ==

进行比较
var duplicate = from a in _db.AgentProductTraining
                where a.CourseCode == course.CourseCode &&
                a.DateTaken == course.DateTaken &&
                a.SymNumber == symNumber
                select a;
© www.soinside.com 2019 - 2024. All rights reserved.