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

我想使用 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 empty

update 这返回用户

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

但这返回空

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


慕村225694
浏览 131回答 3
3回答

紫衣仙女

==区分大小写。如果要比较两个字符串不区分大小写,则应该使用String.Equals接受 a的重载StringComparison:var users = _identityDb.Users                 .Where(u => u.UserName                                 .Equals(user.UserName, StringComparison.OrdinalIgnoreCase);

慕田峪4524236

显然每个人User都有财产UserName。可惜您忘了告诉我们房产的类型。由于标识符的名称以及与字符串的比较,我假设它UserName是一个字符串。如果UserName已经是一个字符串,为什么还要比较它UserName.ToString()?以下命令返回用户 DbSet 中值为UserName、 等于 的所有用户UserName.ToString:var&nbsp;users&nbsp;=&nbsp;_identityDb.Users.Where(u&nbsp;=>&nbsp;u.UserName&nbsp;==&nbsp;u.UserName.ToString());因为UserName是一个字符串,UserName.ToString()所以永远等于UserName。在这种情况下,查询将返回所有Users.现在你似乎有了一个userclass对象User。我们不知道这是否user是User您收藏的_identityDb.Users。以下将返回_identityDb.UsersUserName 等于的所有用户user.UserNamevar&nbsp;users&nbsp;=&nbsp;_identityDb.Users.Where(u&nbsp;=>&nbsp;u.UserName&nbsp;==&nbsp;user.UserName);如果user在里面_identityDb.Users你肯定会找到至少一个User有这个名字的,甚至可能不止一个。如果您仍然找不到,请尝试通过键入用户名进行调试:string&nbsp;userName&nbsp;=&nbsp;user.UserName; var&nbsp;users&nbsp;=&nbsp;_identityDb.Users.Where(u&nbsp;=>&nbsp;u.UserName&nbsp;==&nbsp;userName);最后一种可能性:可能UserName不是字符串,或者您定义了自己的ToString().&nbsp;如果您省略了此信息,那么我的建议是花一些时间学习如何正确提问。

饮歌长啸

问题是因为我使用了某种加密方法。所以SQLServer无法处理它。我刚刚删除了用户名列上的加密。
打开App,查看更多内容
随时随地看视频慕课网APP