C# Linq对特定列的实体解密
我的应用程序是MVC5,使用EF6.3。我尝试使用以下方法解密两列:C# Linq对特定列的实体解密,c#,asp.net-mvc,encryption,linq-to-entities,C#,Asp.net Mvc,Encryption,Linq To Entities,我的应用程序是MVC5,使用EF6.3。我尝试使用以下方法解密两列: var grid = db.mytable.Where(c => c.Item== "Order").Select(c => new { FirstName = Encryption.Decrypt(c.FirstName), LastName = Encryption.Decrypt(c.LastName),
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实体无法识别方法“System.String”
Decrypt(System.String)'方法,无法转换此方法
转换为存储表达式
问题是EF正在尝试将
Select
中的代码转换为SQL,但没有将Encryption.Decrypt
方法转换为SQL。相反,您需要执行查询,然后对结果集进行解密
这可以通过在选择之前添加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()
使您的查询变得更简单。在那之后,你可以随心所欲
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();
好吧,这意味着什么。。。linq无法将C#方法转换为SQL。。。首先具体化IQueryable,然后应用您的方法。。。我在这里问了很多次