使用 LINQ 验证简单登录



我有一个使用 LINQ 的数据源,我需要在其中验证一个简单的用户、密码。

//load textfields to local variables
        string User = UserName.Text.ToLower().Trim();
        string Pass = UserPass.Text.ToLower().Trim();
        //Check Credentials
        var xrm = new XrmServiceContext("Xrm");
        var Inspectors = from i in xrm.SystemUserSet
                         where i.new_MobileAppUser.Equals(User.ToString())
                         select new { InspectorPass = i.new_MobileAppPassword 
                         };
        if (User == null || Pass == null)
        {
            lblMsg.Text = "You must enter a valid username and password"; 
        }
        if (Inspectors == Pass)
            {
                // do something (correct password)
                FormsAuthentication.RedirectFromLoginPage(UserName.Text, chkPersistCookie.Checked);
                Response.Redirect("/default.aspx"); 
            }
            else
            {
                // something else (incorrect password)
            lblMsg.Text = "Sorry, Invalid credentials. Please try again."; 
            }

我在这里缺少什么吗?我已经遵循了其他人的例子,如果检查员 == 通过然后重定向,我应该能够。但它在抱怨我不能?

错误信息:-

错误

错误 23 运算符"=="不能应用于类型的操作数 "System.Linq.IQueryable"和"string"登录.aspx.cs

试试这个:

try
{
    var inspector = Inspectors.SingleOrDefault();
    if(inspector != null && inspector.InspectorPass == Pass)
    {}
}
catch(){}

由于您只是获取单个属性,因此不需要anonymous type。此外,您需要获取单个new_MobileAppPassword因为当前它正在重新收集IQueryable<T>,这就是导致错误的原因:-

var Inspectors = (from i in xrm.SystemUserSet
                  where i.new_MobileAppUser.Equals(User.ToString())
                  select i.new_MobileAppPassword).FirstOrDefault();

但请记住,如果它没有任何匹配的用户,它将返回 null,因此您需要处理它。

最新更新