Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# Asp.net将DateTime/long存储为最小可比值_C#_Asp.net_Sql Server_Datetime - Fatal编程技术网

C# Asp.net将DateTime/long存储为最小可比值

C# Asp.net将DateTime/long存储为最小可比值,c#,asp.net,sql-server,datetime,C#,Asp.net,Sql Server,Datetime,我正在从事一个相当大的SQL数据库项目,它需要一些历史记录跟踪。我知道SQL有数据捕获之类的功能,但我需要有更多的控制权,而不仅仅是存储数据的备份副本和其他需求 这就是我想做的,我在这里发现了一些类似的问题,比如 及 我试图避免的正是这些答案中提到的类型,我的意思是它们在查询过程中需要某种转换,即截断DateTime值,我想做的是使用DateTime.Ticks或其他DateTime属性,并对较小的类型进行单向转换,以创建每个记录的“版本”,在数据库更新/插入后,无需进行任何类型的转换即可快

我正在从事一个相当大的SQL数据库项目,它需要一些历史记录跟踪。我知道SQL有数据捕获之类的功能,但我需要有更多的控制权,而不仅仅是存储数据的备份副本和其他需求

这就是我想做的,我在这里发现了一些类似的问题,比如

我试图避免的正是这些答案中提到的类型,我的意思是它们在查询过程中需要某种转换,即截断
DateTime
值,我想做的是使用
DateTime.Ticks
或其他
DateTime
属性,并对较小的类型进行单向转换,以创建每个记录的“版本”,在数据库更新/插入后,无需进行任何类型的转换即可快速查询这些记录

我所关心的是将
DateTime.Ticks
中的long存储为一个版本,或者使用Base36字符串之类的东西,这是查询期间比较字段所需的大小和时间

有谁能给我指出正确的方向,告诉我如何安全地将
DateTime.Ticks
long
转换成可以在查询过程中直接比较的内容?我的意思是,我希望能够通过以下方式找到历史记录:

int versionToFind = GetVersion(DateTime.Now);   

var result = from rec in db.Records
             where rec.version <= versionToFind
             select rec;

这里要提到的一点是,我不反对使用其他方法快速跟踪数据的历史。我只需要以最快和最小的解决方案结束,以便能够为每个记录生成和比较版本。

您的示例查询没有太多意义,因为它可能永远不会返回任何记录(版本大于最新版本的记录)。但问题是,对于给定的日期(而不是时间),您只是想得到一个唯一的数字(意味着每24小时最多有一个版本)?如果是这样的话,忽略时区问题(很少是个好主意),为什么不将DateTime.Ticks除以每天的Ticks数?@DylanNicholson是的,这是一个非常愚蠢的例子,我对此表示歉意,我只是想说明我想如何定位/跟踪版本。我需要的不是一个唯一的标识符,而是可以用来查询记录的日期的数字表示。我相信这是一个问题。请解释你的最终目标。你没有回答我的问题-为什么不将DateTime.Ticks除以每天的Ticks数?@Alex我试图实现的最终目标是找到从日期生成版本的最快、最小的方法,然后将其直接用作查询的一部分。我正在处理的项目计划有大量记录,我需要能够在查询过程中处理历史而不增加大量开销。您的示例查询没有多大意义,因为它可能永远不会返回任何记录(版本大于最新版本的记录)。但问题是,对于给定的日期(而不是时间),您只是想得到一个唯一的数字(意味着每24小时最多有一个版本)?如果是这样的话,忽略时区问题(很少是个好主意),为什么不将DateTime.Ticks除以每天的Ticks数?@DylanNicholson是的,这是一个非常愚蠢的例子,我对此表示歉意,我只是想说明我想如何定位/跟踪版本。我需要的不是一个唯一的标识符,而是可以用来查询记录的日期的数字表示。我相信这是一个问题。请解释你的最终目标。你没有回答我的问题-为什么不将DateTime.Ticks除以每天的Ticks数?@Alex我试图实现的最终目标是找到从日期生成版本的最快、最小的方法,然后将其直接用作查询的一部分。我正在处理的项目计划有大量记录,我需要能够处理历史记录,而不会在查询过程中增加大量开销。
int versionToFind = record.version; 

var result = from rec in db.Records
             where rec.version >= versionToFind
             select rec;