C# 方法无法转换为存储表达式(LINQ)

C# 方法无法转换为存储表达式(LINQ),c#,asp.net,database,linq,C#,Asp.net,Database,Linq,这是我加密密码的get/set方法: [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { set { var emp = db.Employees.Find(2); password = EncryptDecrypt.Encrypt(emp.Password, "a15s8f5s6e2s3g1w5"); }

这是我加密密码的get/set方法:

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password {
    set {
        var emp = db.Employees.Find(2);
        password = EncryptDecrypt.Encrypt(emp.Password, "a15s8f5s6e2s3g1w5");
    }
    get {
        return password;
    }

}
private Employee slogin;

            using (var db = new Entities())
            {
                var erg = from s in db.Employees
                          where s.LastName.ToString() == model.UserName && s.Password == EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5")
                          select s;
                slogin = erg.FirstOrDefault();

            }
我使用以下代码允许用户登录,并使用它解密密码:

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password {
    set {
        var emp = db.Employees.Find(2);
        password = EncryptDecrypt.Encrypt(emp.Password, "a15s8f5s6e2s3g1w5");
    }
    get {
        return password;
    }

}
private Employee slogin;

            using (var db = new Entities())
            {
                var erg = from s in db.Employees
                          where s.LastName.ToString() == model.UserName && s.Password == EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5")
                          select s;
                slogin = erg.FirstOrDefault();

            }
每次运行代码时,这里都会出现一个NotSupportedException:slogin=erg.FirstOrDefault()

{“LINQ to实体无法识别方法'System.String Decrypt(System.String,System.String)'方法,此方法无法 被翻译成存储表达式。“}


在查询外部解密密码:

var p=EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5");
using (var db = new Entities())
{
            var erg = from s in db.Employees
                      where s.LastName == model.UserName && s.Password == p
                      select s;
            slogin = erg.FirstOrDefault();

}
更简单的方法:

using (var db = new Entities())
{
  slogin = db.Employees.FirstOrDefault(s=>s.LastName == model.UserName && s.Password == p);
}

在查询外部解密密码:

var p=EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5");
using (var db = new Entities())
{
            var erg = from s in db.Employees
                      where s.LastName == model.UserName && s.Password == p
                      select s;
            slogin = erg.FirstOrDefault();

}
更简单的方法:

using (var db = new Entities())
{
  slogin = db.Employees.FirstOrDefault(s=>s.LastName == model.UserName && s.Password == p);
}
“不能翻译成存储表达式”的意思是:我不能用它来编写SQL

以下应该可以工作,但像这样存储可解密密码当然不是一个好做法:

var decryptedpassword = EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5");

var erg = from s in db.Employees
          where s.LastName == model.UserName 
             && s.Password == decryptedpassword
          select s;
“不能翻译成存储表达式”的意思是:我不能用它来编写SQL

以下应该可以工作,但像这样存储可解密密码当然不是一个好做法:

var decryptedpassword = EncryptDecrypt.Decrypt(model.Password, "a15s8f5s6e2s3g1w5");

var erg = from s in db.Employees
          where s.LastName == model.UserName 
             && s.Password == decryptedpassword
          select s;

您只需按用户名查询employees表,然后在用户名存在记录时计算密码。你试图同时做这两件事。我希望这不是一个生产现场。ASP.NET有自己的经过测试的身份识别系统,不要自己发明一个方轮。对于初学者来说,密码应该是散列的,而不是加密的。您只需按用户名查询employees表,然后评估密码是否存在用户名记录。你试图同时做这两件事。我希望这不是一个生产现场。ASP.NET有自己的经过测试的身份识别系统,不要自己发明一个方轮。首先,密码应该是散列的,而不是加密的。