如何在Entity Framework中将SQL时间戳转换为字符串?

3

我需要将SQL表中的最大时间戳值检索到一个字符串变量中,但不知道如何实现。

因此,如果我的表/实体设置如下:

**DEPARTMENTS**
Department  varchar(10) PK
LastUpdated timestamp

这个Linq查询应该是什么样子的?我尝试了几次但总是出错。

编辑:这里是我尝试过的一个示例:

 var result = (from d in _context.LOG_Departments
                      select d.LastUpdated).Max().SingleOrDefault();

错误: 无法将类型“byte”隐式转换为“string”。

编辑解决方案:

public string MaxDepartment()
    {

        CPLinkEntities _context = new CPLinkEntities();
        var results = _context.LOG_Departments.Max(t => t.LastUpdated);
        string hex = BitConverter.ToString(results);
        hex =  hex.Replace("-", "");
        return hex;
    }

分享一下你尝试过的代码。 - DevelopmentIsMyPassion
@AshReva,我添加了一个我尝试过的示例。时间戳以二进制形式存储在SQL服务器上,因此似乎我还需要进行转换。只是不太熟悉LINQ。 - Alan Fisher
你试过移除 SingleOrDefault() 吗?Max() 已经给你一个单个的值了。 - dkozl
1
是的,但由于时间戳在服务器上以二进制形式存储,所以现在我得到了无法将类型字节转换为字符串的错误。 - Alan Fisher
3个回答

2

时间戳不是日期时间类型:

http://technet.microsoft.com/en-us/library/ms182776.aspx

这是一种数据类型,在数据库中公开自动生成的唯一二进制数。rowversion通常用作版本控制表行的机制。存储大小为8个字节。rowversion数据类型只是一个递增的数字,不保留日期或时间。要记录日期或时间,请使用datetime2数据类型。

然后您可以使用

long timeStampLong = BitConverter.ToInt64(value, 0);

获取长整型数值(如果需要,将其转换为字符串)。


谢谢,我完全知道时间戳是什么,事实上我正在使用它进行版本控制,并且自从提出问题以来,已经找到并发布了我的答案作为编辑。 - Alan Fisher
好的,但将其转换为字符串似乎很奇怪。该字符串中可能会出现奇怪的字符。这对于显示来说可能不好。而且您可能甚至无法比较这两个字符串是否大于或类似。 - pero
我正在使用它来进行查找表的版本控制,例如部门(这些不经常更改)。我将字符串传递到网页并将其存储在本地存储中,然后将每个页面加载与其进行比较,以查看部门表中是否有任何更改,如果有,则刷新部门的本地存储哈希值。我根本没有显示该值。我将在许多查找中重复此操作,现在需要找出如何动态传递表名,以便我不必重复代码。应该是更新查找下拉菜单的相当不错的方法。谢谢。 - Alan Fisher

2
我找到了如何进行转换。

public string MaxDepartment() {

公共字符串最大部门() {
    CPLinkEntities _context = new CPLinkEntities();
    var results = _context.LOG_Departments.Max(t => t.LastUpdated);
    string hex = BitConverter.ToString(results);
    hex =  hex.Replace("-", "");
    return hex;
}

-1

它可能是这样的:

yourDBContext context=new yourDBContext();
var maxTimestamp = context.yourTable.Max(t => t.Timestamp);

我更喜欢查看this以获取有关使用linq的更多详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接