【发布时间】:2017-07-19 01:31:27
【问题描述】:
我的 Code First Entity Framework for SQL TimeStamps 中有一个字节数组,映射如下:
[Column(TypeName = "timestamp")]
[MaxLength(8)]
[Timestamp]
public byte[] TimeStamps { get; set; }
上述属性相当于C#中的SQL server“timestamp”数据类型。
在 SQL Server 中,我可以轻松地比较“时间戳”,如下所示...
SELECT * FROM tableName WHERE timestampsColumnName > 0x000000000017C1A2
我想在 C# 或 Linq Query 中实现相同的目标。在这里,我编写了我的 Linq 查询,但无法正常工作。
byte[] lastTimeStamp = someByteArrayValue;
lstCostCenter.Where(p => p.TimeStamps > lastTimeStamp);
我也试过用BitConverter 来比较一个同样不起作用的两字节数组...
lstCostCenter.Where(p => BitConverter.ToInt64(p.TimeStamps, 0) > BitConverter.ToInt64(lastTimeStamp, 0));
如何在 C# 或 Linq Query 中比较字节数组。
注意 - 我只是不想像使用 SequenceEqual 或任何其他仅比较并返回真或假的方法那样比较两个数组。我希望在 Linq 查询中与大于 > 或小于
【问题讨论】:
-
您想比较使用数据库(实体框架、LINQ to sql 等)LINQ 查询还是内存中 linq 查询?
-
字节在数组中是如何排列的?首先是最高有效字节?如果是这样,则尝试使用
.Reverse().ToArray()将输入字节反转到BitConverter.ToInt64调用 -
@Evk 我想与不在内存中的数据库 Linq 查询进行比较。
-
@Dilip0165 好的,我在回答中提供了一种使用实体框架的方法。
标签: c# arrays sql-server linq timestamp