我将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。所以,如果这是你想要的比较,那么你就可以去了。