DbSet<User>.Where() 总是 return null EFCore2.2
DbSet<User>.Where() always return null EFCore2.2
我想使用 linq 从数据库中获取查询,但每次都 return 为空或为空;
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
这个 return 用户
var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());
但是这个return是空的
var users = _identityDb.Users.Where(u => u.UserName == user.UserName.ToString());
==
区分大小写。
如果你想比较两个不区分大小写的字符串,你应该使用接受 StringComparison
:
的 String.Equals
的重载
var users = _identityDb.Users
.Where(u => u.UserName
.Equals(user.UserName, StringComparison.OrdinalIgnoreCase);
您可以了解有关 StringComparison
枚举 here 的更多信息。
问题是因为我使用了一些加密方法。所以 SQLServer 无法处理它。我刚刚删除了用户名列上的加密。
显然每个 User
都有一个 属性 UserName
。唉,你忘了告诉我们 属性 的类型。由于标识符的名称以及您与字符串的比较,我假设 UserName
是一个字符串。
如果UserName
已经是一个字符串,为什么还要比较UserName.ToString()
?
以下 returns 用户 DbSet 中值为 UserName
,等于 UserName.ToString
的所有用户:
var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());
因为 UserName
是一个字符串,所以 UserName.ToString()
总是等于 UserName
。在这种情况下,查询将 return all Users
.
现在您的 object user
似乎是 class User
。我们不知道这个 user
是否是您 _identityDb.Users
的 collection 中的 User
。
以下 return _identityDb.Users
中用户名等于 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()
。如果您忽略了这些信息,那么我的建议是花一些时间学习如何正确提问。
我想使用 linq 从数据库中获取查询,但每次都 return 为空或为空;
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
这个 return 用户
var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());
但是这个return是空的
var users = _identityDb.Users.Where(u => u.UserName == user.UserName.ToString());
==
区分大小写。
如果你想比较两个不区分大小写的字符串,你应该使用接受 StringComparison
:
String.Equals
的重载
var users = _identityDb.Users
.Where(u => u.UserName
.Equals(user.UserName, StringComparison.OrdinalIgnoreCase);
您可以了解有关 StringComparison
枚举 here 的更多信息。
问题是因为我使用了一些加密方法。所以 SQLServer 无法处理它。我刚刚删除了用户名列上的加密。
显然每个 User
都有一个 属性 UserName
。唉,你忘了告诉我们 属性 的类型。由于标识符的名称以及您与字符串的比较,我假设 UserName
是一个字符串。
如果UserName
已经是一个字符串,为什么还要比较UserName.ToString()
?
以下 returns 用户 DbSet 中值为 UserName
,等于 UserName.ToString
的所有用户:
var users = _identityDb.Users.Where(u => u.UserName == u.UserName.ToString());
因为 UserName
是一个字符串,所以 UserName.ToString()
总是等于 UserName
。在这种情况下,查询将 return all Users
.
现在您的 object user
似乎是 class User
。我们不知道这个 user
是否是您 _identityDb.Users
的 collection 中的 User
。
以下 return _identityDb.Users
中用户名等于 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()
。如果您忽略了这些信息,那么我的建议是花一些时间学习如何正确提问。