我在MVC POST方法中有一些代码。我只是想简单地将ViewModel中返回的用户名与从数据库返回的EF集合进行比较。基本上我想要一个布尔结果。我尝试使用Find,但它不允许我指定Lambda。我尝试使用Where但它返回一个列表,不会让我使用FirstOrDefault。我能帮忙吗?
[HttpPost]
public ActionResult Login(LoginModel loginModel)
{
try
{
using (PrefCenterEntities db = new PrefCenterEntities())
{
var userName = loginModel.UserName;
var passWord = loginModel.Password;
User pcUser = new User
{
UserName = userName,
Password = passWord
};
// Find if already exists
if (db.Users.Where(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault())
}
答案 0 :(得分:4)
我尝试使用Where但它返回一个列表并且不允许我使用 FirstOrDefault。
您需要Enumerable.Any
喜欢:
if (db.Users.Any(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0))
如果您要使用FirstOrDefault
,请将其与null
进行比较,例如:
if (db.Users.Where(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault() != null)
或
if (db.Users.FirstOrDefault(y => System.String.Compare(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase) == 0) != null)
您似乎正在尝试进行不区分大小写的比较,您有两种选择。使用带有参数的string.Equals
来指定不敏感的大小写比较,如:
if (db.Users.Any(y => System.String.Equals(y.UserName, loginModel.UserName, System.StringComparison.OrdinalIgnoreCase)))
或者如果将String.Equals
转换为谎言数据源语言时出现问题,请将两个值转换为大写,然后比较如下:
if (db.Users.Any(y => y.UserName != null && loginModel.UserName != null &&
y.UserName.ToUpper() == loginModel.UserName.ToUpper()))
{
//record exits.
}