如何使用LINQ for Entity Framework检查列中的元组或单个值中的空值?

时间:2017-04-26 12:46:30

标签: c# sql-server entity-framework linq null

我有一行中有一个日期时间值。如果该值具有日期,则确认用户并且可以登录。但是,如果值为NULL,则用户需要找到他们的确认电子邮件并在登录前单击链接进行验证。

我需要找出使用LINQ to EF,如何验证该行中的值是否为NULL。

这就是我所拥有的:

C#:

var verifiedquery = from q in db.applicants 
                    join r in db.UserActivations on q.id equals r.userID 
                    where q.ap_username.Equals(lgnUsers.UserName.Trim()) 
                    && q.ap_password.Equals(lgnUsers.Password) 
                    select r.dateVerified.Value;

if (!verifiedquery.Any())
{
    login.FailureText = "Confirm your account please.";
    e.Authenticated = false;
    return;
}

3 个答案:

答案 0 :(得分:2)

问题在于您的选择:

select r.dateVerified.Value

您正在获取可空字段的Value属性。相反,您可以让查询返回bool

var isVerified = (from q in db.applicants 
                 join r in db.UserActivations on q.id equals r.userID 
                 where q.ap_username.Equals(lgnUsers.UserName.Trim()) 
                 && q.ap_password.Equals(lgnUsers.Password) 
                 && r.dateVerified.HasValue
                 select r.dateVerified)
    .Any();

答案 1 :(得分:1)

您可以获取可为空的datetime变量,然后使用此变量检查它是否具有值。 使用以下代码行

var verifiedquery = from q in db.applicants 
                    join r in db.UserActivations on q.id equals r.userID 
                    where q.ap_username.Equals(lgnUsers.UserName.Trim()) 
                    && q.ap_password.Equals(lgnUsers.Password) 
                    select r.dateVerified;

if (!verifiedquery.HasValue)
{
    login.FailureText = "Confirm your account please.";
    e.Authenticated = false;
    return;
}

答案 2 :(得分:1)

这里有两个问题:

1>从查询中得到一个列表,你只需要选择一个(如果你确定你的查询只返回一个结果,那么第一个)

2 - ;你想要r.dateVerified,它是一个可以为空的dateTime,这样你就可以检查它是否为null。

var verifiedquery = from q in db.applicants 
                        join r in db.UserActivations on q.id equals r.userID 
                        where q.ap_username.Equals(lgnUsers.UserName.Trim()) 
                        && q.ap_password.Equals(lgnUsers.Password) 
                        select r.dateVerified;
    var fstResult = verifiedQuery.First();
    if (!fstResult.HasValue)
    {
        login.FailureText = "Confirm your account please.";
        e.Authenticated = false;
        return;
    }