通过使用来自

时间:2017-10-02 00:23:18

标签: c# linq wcf

我目前正在研究Wcf服务并在Angular JS应用程序中使用它。 我正在尝试将Sql查询转换为Linq Query。我正在根据用户名和密码创建用户登录系统。如果用户输入错误的用户名和密码四次,那么我想将锁定的用户帐户放入sql数据库。否则,如果用户第一次输入错误的用户名和密码,但第二次输入正确的用户名和密码,那么我想返回方法为true并重新计算尝试为零。但是我得到了Linq查询的预期结果。

这是我的ADO.NET代码......

 public bool AuthenticateUser(UserLogin userLogin)
    {

        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("spAuthenticateUser", con);
            cmd.CommandType = CommandType.StoredProcedure;
            string encryptedpassword = FormsAuthentication.HashPasswordForStoringInConfigFile(userLogin.Password, "SHA1");
            SqlParameter paramUsername = new SqlParameter("@UserName", userLogin.Username);
            SqlParameter paramPassword = new SqlParameter("@Password", encryptedpassword);

            cmd.Parameters.Add(paramUsername);
            cmd.Parameters.Add(paramPassword);

            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                int RetryAttempts = Convert.ToInt32(rdr["RetryAttempts"]);
                if (Convert.ToBoolean(rdr["AccountLocked"]))
                {
                    return false;
                }
                else if (RetryAttempts > 0)
                {
                    int AttemptsLeft = (4 - RetryAttempts);

                }

                else if (Convert.ToBoolean(rdr["Authenticated"]))
                {
                    return true;
                }

                else
                {
                    return false;
                }
            }
        }
    }

这是我尝试转换的Linq查询,但它没有给出期待的结果。

 public bool AuthenticateUser(UserLogin userLogin)
                {
            using (HalifaxDatabaseEntities db = new HalifaxDatabaseEntities())
                    {
      var attamp = from X in db.tblUsers
     where X.Username == userLogin.Username&&  X.Password == userLogin.Password
      select X.RetryAttempts != 4;
      return attamp.Single();

                    }
                }

正确的Linq用于跟踪Sql查询

1 个答案:

答案 0 :(得分:0)

您可能需要从过滤器中取出密码来计算总重试次数。但在实际验证用户时使用它。

一旦成功验证,将计数器重置为零。

bool LimitExceeded()
{
var exceeded=false;
var totalRetries =-1;
var attamp = from X in db.tblUsers
                where X.Username == userLogin.Username 
                select X

 if( attamp.Any())
 {
        if(attamp.firstOrDefault().RetryAttempts.HasValue)      totalRetries =attamp.firstOrDefault().RetryAttempts;
        exceeded=  totalRetries>4;
 }
 return exceeded
}

上述代码不是使用任何代码编辑器编写的。那可能无法编译。我刚写信给你一个想法。