You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Linq查询做登录判断时else分支永远无法执行问题

问题根因

你遇到的问题核心是LINQ查询的延迟执行特性导致的,具体问题点如下:

  • 你定义的UserLogin是LINQ查询对象,默认是延迟执行的:只有当你调用Count()、First()这类立即执行方法时,才会用当前的变量值拼接SQL执行查询
  • 你在定义完查询后、调用Count()之前,就提前把this.Username和this.Password赋值为空字符串,执行查询时相当于执行的是Username.Contains("") AND Password.Contains(""),而字符串判断包含空字符串永远返回true,所以查询永远会返回所有用户记录,Count()永远大于0,自然不会进入else分支
  • 额外注意:你查询条件里用的是按位与&而不是逻辑与&&,逻辑判断场景应该用&&更规范;同时Contains是模糊匹配,登录逻辑应该用精确相等==,否则会出现输部分账号密码就能登录的安全问题。

修复方案

调整变量清空的时机,等执行完查询判断逻辑之后再清空输入,同时修正查询条件的写法:

// 先保留输入的账号密码用于查询
var inputUsername = this.Username;
var inputPassword = this.Password;
// 改为精确匹配,用逻辑与
var UserLogin = from m in _context.User 
                where m.Username == inputUsername && m.Password == inputPassword 
                select m.Username;
// 先执行查询判断,用Any()比Count()效率更高,不需要统计全量匹配数
if(UserLogin.Any()) 
{
    UsernameLogged = UserLogin.First();
}
else
{
    Console.WriteLine("Sisa: " + UsernameLogged);
    UsernameLogged = string.Empty;
    Console.WriteLine(UsernameLogged);
}
// 最后统一清空输入,不管登录成功还是失败都清空
this.Username = string.Empty;
this.Password = string.Empty;

内容的提问来源于stack exchange,提问作者Giovanni Mosquera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:48:03