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();