C# 减去两个datetime(TimeStamp)并与lambda查询中的间隔(int)进行比较
我需要做到这一点。 (CurrentTimeStamp-CreateTimstamp)>(间隔以小时为单位)。 我尝试了下面的代码,但未能实现并获得异常。 LINQ to Entities无法识别方法“System.TimeSpan Subtract(System.DateTime)”方法,并且无法将此方法转换为存储表达式C# 减去两个datetime(TimeStamp)并与lambda查询中的间隔(int)进行比较,c#,sql,linq,lambda,C#,Sql,Linq,Lambda,我需要做到这一点。 (CurrentTimeStamp-CreateTimstamp)>(间隔以小时为单位)。 我尝试了下面的代码,但未能实现并获得异常。 LINQ to Entities无法识别方法“System.TimeSpan Subtract(System.DateTime)”方法,并且无法将此方法转换为存储表达式 DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0); return que
DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0);
return query.Where(m => now.Subtract(m.create_timestamp) >= m.interval);
为什么不使用DateTime。比较
var now=DateTime.now;
var removeMins=now.Subtract(TimeSpan.frommins(2));
//var addMins=now.Add(TimeSpan.frommins(2));
var result=DateTime.Compare(现在,removeMins);
如果(结果<0)
{
WriteLine($“Now({Now})早于removeMin({removeMins})”;
//返回query.Where(m=>m.date==now);
}
否则如果(结果==0)
{
WriteLine($“Now({Now})等于removeMin({removeMins})”;
}
其他的
{
WriteLine($“Now({Now})晚于removeMin({removeMins})”;
//返回query.Where(m=>m.date==removeMins);
}
为什么不使用DateTime。比较
var now=DateTime.now;
var removeMins=now.Subtract(TimeSpan.frommins(2));
//var addMins=now.Add(TimeSpan.frommins(2));
var result=DateTime.Compare(现在,removeMins);
如果(结果<0)
{
WriteLine($“Now({Now})早于removeMin({removeMins})”;
//返回query.Where(m=>m.date==now);
}
否则如果(结果==0)
{
WriteLine($“Now({Now})等于removeMin({removeMins})”;
}
其他的
{
WriteLine($“Now({Now})晚于removeMin({removeMins})”;
//返回query.Where(m=>m.date==removeMins);
}
我认为linq to实体无法将TimeSpan的比较转换为sql查询。也许您应该使用System.Data.Entity中的DbFunctions来比较时间跨度或使用ef core。这是使用dbf函数的示例
DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0);
return query.Where(m => DbFunctions.DiffSeconds(now,m.create_timestamp).Value >= m.interval.TotalSeconds);
我认为linq to实体无法将TimeSpan的比较转换为sql查询。也许您应该使用System.Data.Entity中的DbFunctions来比较时间跨度或使用ef core。
这是使用dbf函数的示例
DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0);
return query.Where(m => DbFunctions.DiffSeconds(now,m.create_timestamp).Value >= m.interval.TotalSeconds);
只要连接
IQueryable
LINQ语句,IQueryable的属性Expression
就会更改。只有在执行IQueryable时(使用ToList、foreach、FirstOrDefault、Any等),表达式才会发送到IQueryable.Provider
,后者将在执行查询之前将表达式转换为SQL
异常消息表示您的提供商不知道DateTime.Subtract
。这在一定程度上取决于您使用的提供者(MicroSoft、SQLite、MySql、Mongo等等),但大多数提供者都不知道`DateTime.Subtract'
让自己熟悉的列表,以及。后者包含几种使用时间跨度进行计算的方法
显然,您希望所有项目都位于CreateTimeStamp+Interval item.create\u timestamp+item.Interval的位置,只要您连接
IQueryable
LINQ语句,IQueryable的属性表达式
就会更改。只有在执行IQueryable时(使用ToList、foreach、FirstOrDefault、Any等),表达式才会发送到IQueryable.Provider
,后者将在执行查询之前将表达式转换为SQL
异常消息表示您的提供商不知道DateTime.Subtract
。这在一定程度上取决于您使用的提供者(MicroSoft、SQLite、MySql、Mongo等等),但大多数提供者都不知道`DateTime.Subtract'
让自己熟悉的列表,以及。后者包含几种使用时间跨度进行计算的方法
显然,您希望所有项目都包含CreateTimeStamp+Interval item.create\u timestamp+item.Interval
DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0);
return query.Where(m => DbFunctions.DiffSeconds(now,m.create_timestamp).Value >= m.interval.TotalSeconds);
query.Where(item => item.create_timestamp + item.interval <= now);