通常,这样做是为了返回与列表匹配的数据集:
string[] ssn = { "123456789", "987654321" };
var result_set = db.employee.Where(w => ssn.Contains(w.SSN)).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,当通过“始终加密”对SSN列进行加密时,会发生以下错误:
SqlException:使用(encryption_type ='DETERMINISTIC',encryption_algorithm_name ='AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name ='CEK_SSN',column_encryption_key_database_name ='var'('in'='In''和'in'到1'的加密的数据类型varchar(9)进行排序。
一般而言,由于单个值有效,因此设置正确:
string ssn = "123456789";
var result_set = db.employee.Where(w => w.SSN == ssn).ToList();
Run Code Online (Sandbox Code Playgroud)
我正在寻找实现此客户端的最佳方法。我知道这种解决方法可以解决问题,但是它需要整个表才能通过:
var result_set = db.employee.ToList().Where(w => ssn.Contains(w.SSN));
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些示例(与.NET的较早版本有关,不一定与“始终加密”有关),其中有些花哨的扩展名创建了一堆“或”。我还知道,使用表变量,我可以使用存储过程做一些棘手的事情。但是我确实在寻找一种优雅的方式来实现此目的,最好是通过LINQ,但至少是在客户端代码中。我正在确定“始终加密”是否会对新项目带来任何无法逾越的障碍,因此我愿意接受任何建议。