【发布时间】:2020-12-03 07:46:00
【问题描述】:
我将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 个字节,因此不会进行大量的数组比较。
【问题讨论】:
-
你可以使用 Array.Equals(object, object)
-
实际上,在这种情况下使用 Array.Equals 似乎比 == 更“正确”。非常感谢@jdwengspan>
标签: c# sql-server compare