我目前正在研究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查询
答案 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
}
上述代码不是使用任何代码编辑器编写的。那可能无法编译。我刚写信给你一个想法。