我有一行中有一个日期时间值。如果该值具有日期,则确认用户并且可以登录。但是,如果值为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;
}
答案 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;
}