我只需要在涉及
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;
这可能看起来有点迂回,但您可以使用 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;
可以在命名空间
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()。
你可以像下面那样做:
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();
你必须使用
System.Data.Entity.DbFunctions.TruncateTime
试试这个
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 中使用。
这就是我通过进行类似的日期搜索而结束的方式,我还必须考虑时间(小时和分钟部分)
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;
嘿,当我构建查询时,下面的这个有效
DateTime date = Convert.ToDateTime(SearchText);
query = query.Where(x => x.Date.Month == date.Month
&& x.Date.Day == date.Day
&& x.Date.Year == date.Year);
// 让我知道这是否对您有用,因为它提取了为我搜索的日期
有点难看,但它在不使用任何 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();
取消.Date 如果该字段是 DateTime,则可以与 ==
进行比较var duplicate = from a in _db.AgentProductTraining
where a.CourseCode == course.CourseCode &&
a.DateTaken == course.DateTaken &&
a.SymNumber == symNumber
select a;