Linq To Entities 解密特定列
Linq To Entities Decryption of specific columns
我的应用程序是 MVC 5,使用 EF 6.3。我正在尝试使用以下内容解密两列:
var grid = db.mytable.Where(c => c.Item== "Order").Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();
我收到这个错误:
LINQ to Entities does not recognize the method 'System.String
Decrypt(System.String)' method, and this method cannot be translated
into a store expression.
问题是 EF 正在尝试将您的 Select
中的代码转换为 SQL,但没有将 Encryption.Decrypt
方法转换为 SQL。相反,您需要执行查询,然后对结果集进行解密。
这可以通过在 Select
之前添加 ToList()
来强制执行
var grid = db.mytable.Where(c => c.Item== "Order").ToList().Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();
您应该 .ToList()
使您的查询变为 Immediate Query Execution。在那之后,你可以做任何你想做的事情。
var filteredTable = db.mytable.Where(c => c.Item== "Order").ToList();
var grid = filteredTable .Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();
我的应用程序是 MVC 5,使用 EF 6.3。我正在尝试使用以下内容解密两列:
var grid = db.mytable.Where(c => c.Item== "Order").Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();
我收到这个错误:
LINQ to Entities does not recognize the method 'System.String Decrypt(System.String)' method, and this method cannot be translated into a store expression.
问题是 EF 正在尝试将您的 Select
中的代码转换为 SQL,但没有将 Encryption.Decrypt
方法转换为 SQL。相反,您需要执行查询,然后对结果集进行解密。
这可以通过在 Select
之前添加 ToList()
来强制执行
var grid = db.mytable.Where(c => c.Item== "Order").ToList().Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();
您应该 .ToList()
使您的查询变为 Immediate Query Execution。在那之后,你可以做任何你想做的事情。
var filteredTable = db.mytable.Where(c => c.Item== "Order").ToList();
var grid = filteredTable .Select(c => new
{
FirstName = Encryption.Decrypt(c.FirstName),
LastName = Encryption.Decrypt(c.LastName),
Id = c.Id
}).ToList();