比较SQL Server中的两个字节数组



我将byte[]作为varbinary(64)存储在SQL Server数据库中,并且我需要查找具有输入byte[]的特定行。我使用实体框架来访问数据库,因此我可以运行这样的linq查询:

private MyTable GetMyTable(byte[] inputArray) 
{
return _context.MyTable.FirstOrDefault(x => x.Hash.SequenceEqual(inputArray));
}

问题是SequenceEqual无法转换为SQL查询,并且查询将在本地进行评估(这是不可取的行为(。是否可以用简单的比较运算符==代替SequenceEqual?还是这种方法容易出错?还有比这更好的选择吗?

private MyTable GetMyTable(byte[] inputArray) 
{
return _context.MyTable.FirstOrDefault(x => x.Hash == inputArray);
}

请注意,我的字节数组的范围从32到64字节,所以不会进行大量的数组比较。

是否可以将SequenceEqual替换为简单的比较运算符==?

可能是的,这将作为转换为SQL

SELECT ...
FROM [MyTable] AS [c]
WHERE [c].[Hash] = @__inputArray_0

SQL Server中用于binary/varbinary的=对值执行逐字节二进制比较,忽略后面的0。所以,如果这是你想要的比较,那么你就可以去了。

相关内容

  • 没有找到相关文章

最新更新