Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 减去两个datetime(TimeStamp)并与lambda查询中的间隔(int)进行比较_C#_Sql_Linq_Lambda - Fatal编程技术网

C# 减去两个datetime(TimeStamp)并与lambda查询中的间隔(int)进行比较

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

我需要做到这一点。 (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 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);