Linq到特定列的实体解密

问题描述 投票:-1回答:2

我的应用程序是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无法识别方法'System.String Decrypt(System.String)',并且无法将该方法转换为存储表达式。

c# asp.net-mvc encryption linq-to-entities
2个回答
1
投票
问题是EF试图将Select中的代码转换为SQL,但没有将Encryption.Decrypt方法转换为SQL。相反,您需要执行查询,然后对结果集进行解密。

这可以通过在ToList()之前加Select强制执行来完成

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


0
投票
您应该.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();

© www.soinside.com 2019 - 2024. All rights reserved.