【发布时间】:2015-07-01 13:47:16
【问题描述】:
我从数据库中得到rowVersion byte[8]
var rowVersion= new MyContext().Employee.FirstOrDefault(x => x.Id).rowVersion;
// suppose above the actual databse values is 0x0000000000038B8C
var rowVersionToLong = BitConverter.ToInt64(rowVersion,0);
现在如果我手动执行此操作:
String rowversionStr = "0x0000000000038B8C";
byte[] mybyteArray = System.Text.ASCIIEncoding.ASCII.GetBytes(rowversionStr);
这给了我byte[18],当我将它转换为Int64 时,它给了我不同的价值。
我没有得到这个。
我想将rowVersion 作为参数传递给WebApi get 方法。由于Byte[] 是不允许的,所以我将其作为字符串传递
更新:
public IHttpActionResult Get(string rowVersion, int id)
{
var exisitingRowVersion = long.Parse(rowVersion.Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
var result = new MyContext().employees.ToList().Where(x => x.Id == 2 && BitConverter.ToInt64(x.RowVersion, 0) > exisitingRowVersion);
return Ok(result);
不明白为什么这个不起作用。我们基本上是在比较long和long
【问题讨论】:
-
正确的方法是
long.Parse("0x0000000000038B8C".Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);... 但是即使long也没有被Javascript 完全支持,所以我不会传递long... 你可以传递出去直接string值。 -
基本上字符串被映射到我的 webapi 参数。字符串基本上是存储在 Sql Server 数据库中的 rowVersion 现在我想执行 this.context.employee.where(x=>(BitConverter.ToInt64(x.rowVersion,0)> rowVersionParameter))。在这里,我无法将 long 与字符串值进行比较。我所做的是尝试从字符串创建一个 byte[] 以将其与数据库值进行比较。但这行不通。当我将它转换为 byte[] 它返回 byte[18]
-
Well long.Parse("0x0000000000038B8C".Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);看起来像一个有效的答案
-
但是你不能在查询中使用它......你不能将
RowVersion类型映射到long......它似乎只与byte[]兼容。 .. 但你不能用byte[]来做>...例如见stackoverflow.com/q/7437970/613130 -
添加了对原始问题的更新。还是不明白为什么 long 不拿 long 比较?
标签: c#-4.0 entity-framework-6 rowversion