C# 非静态方法需要一个目标

C# 非静态方法需要一个目标,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,你好,, 在我的新用户注册表单上验证时出错 我的PMS\u用户表没有记录(null)。我还尝试检查currUser的null控件 我错过了什么 错误是: 非静态方法需要一个目标 “非静态方法需要目标”表示作用域内的某个对象为null 尝试检查上下文和var结果值: private PMS_USERS currUser; private bool validateUserName() { dbContext = new PmsEntities(); var validateUser

你好,, 在我的新用户注册表单上验证时出错

我的
PMS\u用户
表没有记录(
null
)。我还尝试检查
currUser
null
控件

我错过了什么

错误是:


非静态方法需要一个目标

“非静态方法需要目标”表示作用域内的某个对象为
null

尝试检查上下文和var结果值:

private PMS_USERS currUser;
private bool validateUserName()
{
    dbContext = new PmsEntities();
    var validateUser = dbContext.PMS_USERS.Where(p=> p.LOGICALREF != currUser.LOGICALREF).Where(p=> p.USERNAME == currUser.USERNAME);
    return !validateUser.Any();
}
检查并告诉我们您是否有相同的异常。

使用

 dbContext = new PmsEntities();
 if (dbContext != null && currUser != null)
 {
     var validateUser = dbContext.PMS_USERS.Where(p=> p.LOGICALREF != currUser.LOGICALREF && p.USERNAME == currUser.USERNAME);

    if (validateUser !=null)
    {
       return !validateUser.Any();
    }
    else
       return null;
 }

您应该首先测试currUser是否为null,以及您的dbContext是否为null

private PMS_USERS currUser;
private bool validateUserName()
{
    dbContext = new PmsEntities();
    return PMS_USERS != null 
        ? var validateUser = dbContext.PMS_USERS.Where(p=> p.LOGICALREF != currUser.LOGICALREF).Where(p=> p.USERNAME == currUser.USERNAME).Any()
        : false;
}
其次,您可以简化查询,如yhat:

if (currUser == null) return false;
if (dbContext == null) throw new Exception ("The dbContext has not been set");
然后将return语句更改为:

 var validateUser = dbContext.PMS_USERS.Where(p=> p.LOGICALREF != currUser.LOGICALREF &&  p.USERNAME == currUser.USERNAME);

如果您想确保只有一个用户与您的条件相对应,您可以在FirstOrDefault之外使用SingleOrDefault语句。

这里似乎需要一个Try/Catch…您能解释一下
return validateUser.Any()之间的区别吗
返回(validateUser.FirstOrDefault()!=null)?你为什么建议第二名而不是第一名?事实上,我认为是一样的。答案更简单。问题来自此问题中的Where子句。添加if(dbContext!=null)检查对我有效。你能解释一下原因吗?
return (validateUser.FirstOrDefault() != null);