为了账号安全,请及时绑定邮箱和手机立即绑定

DbSet<User>.Where() 始终返回 null EFCore2.2

DbSet<User>.Where() 始终返回 null EFCore2.2

C#
慕村225694 2023-07-09 09:44:53
我想使用 linq 从数据库获取查询,但每次都返回 null 或空;var user = await _identityDb.Users.FirstOrDefaultAsync(u => u.UserName == user.UserName); // this return null but user exist even in debuger var users = _identityDb.Users.Where(u => u.UserName == user.UserName); // this return emptyupdate 这返回用户var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());但这返回空var users = _identityDb.Users.Where(u => u.UserName == user.UserName.ToString());
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

==区分大小写。

如果要比较两个字符串不区分大小写,则应该使用String.Equals接受 a的重载StringComparison

var users = _identityDb.Users
                .Where(u => u.UserName
                                .Equals(user.UserName, StringComparison.OrdinalIgnoreCase);


查看完整回答
反对 回复 2023-07-09
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

显然每个人User都有财产UserName。可惜您忘了告诉我们房产的类型。由于标识符的名称以及与字符串的比较,我假设它UserName是一个字符串。

如果UserName已经是一个字符串,为什么还要比较它UserName.ToString()

以下命令返回用户 DbSet 中值为UserName、 等于 的所有用户UserName.ToString

var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());

因为UserName是一个字符串,UserName.ToString()所以永远等于UserName。在这种情况下,查询将返回所有Users.

现在你似乎有了一个userclass对象User。我们不知道这是否userUser您收藏的_identityDb.Users

以下将返回_identityDb.UsersUserName 等于的所有用户user.UserName

var users = _identityDb.Users.Where(u => u.UserName == user.UserName);

如果user在里面_identityDb.Users你肯定会找到至少一个User有这个名字的,甚至可能不止一个。如果您仍然找不到,请尝试通过键入用户名进行调试:

string userName = user.UserName;
var users = _identityDb.Users.Where(u => u.UserName == userName);

最后一种可能性:可能UserName不是字符串,或者您定义了自己的ToString(). 如果您省略了此信息,那么我的建议是花一些时间学习如何正确提问。


查看完整回答
反对 回复 2023-07-09
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

问题是因为我使用了某种加密方法。所以SQLServer无法处理它。我刚刚删除了用户名列上的加密。



查看完整回答
反对 回复 2023-07-09
  • 3 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信