Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq对特定列的实体解密_C#_Asp.net Mvc_Encryption_Linq To Entities - Fatal编程技术网

C# Linq对特定列的实体解密

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),

我的应用程序是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),
                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,然后应用您的方法。。。我在这里问了很多次