将null变量发送到方法并将它们与Linq中的Entity null变量进行比较

时间:2013-05-06 14:58:35

标签: linq null entity

我有一个方法,我发送用户名,密码,电子邮件与此方法相比,如果有相同的记录我正在查询Linq。但是当用户发送空值时,它与linq实体null值不同,它返回false。

代码在这里:

public int GetTheUserID(string login, string pass, bool isAD)
{
        try
        {
            if (pass == null) {  } 
            if (query.Any()) query = query.Where(x => (x.LoginName == login) && (x.Password_ == pass) && (isAD == x.ADUser) && (x.Deleted == false));
            else query = Entity.SecurityUsers.Where(x => (x.LoginName == login) && (x.Password_ == pass) && (isAD == x.ADUser) && (x.Deleted == false));
            if (query.Any())
            {
                singleresult.TransactionResult = query.FirstOrDefault();
                return singleresult.TransactionResult.ID;
            }
            else return 0;
        }
        catch (Exception ex)
        {
            return 0;
        }
}

例如,如果密码为空,并且如果该用户凭据和密码存在相同记录,则“x.Password_ == pass”不返回true。

这里传递可以有值或者可以为null。我不能写“x.Password为null”或“x.password == null”但最后一个没有问题为什么我的?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

public int GetTheUserID(string login, string pass, bool isAD)
    {
        try
        {
            if (query.Any()) query = query.Where(x => (x.LoginName == login) 
                  && ((pass == null) ? x.Password_ == null : x.Password_ == pass) 
                  && (isAD == x.ADUser) && (x.Deleted == false));
            else query = Entity.SecurityUsers.Where(x => (x.LoginName == login) 
                  && ((pass == null) ? x.Password_ == null : x.Password_ == pass)
                  && (isAD == x.ADUser) && (x.Deleted == false));
            if (query.Any())
            {
                singleresult.TransactionResult = query.FirstOrDefault();
                return singleresult.TransactionResult.ID;
            }
            else return 0;
        }
        catch (Exception ex)
        {
            return 0;
        }
    }