我有一个填满person信息的person表。我想得到表内的人的列表,并检查他们是否在过去24小时内更新了他们的密码,然后返回一个人的名字和一个布尔属性,无论他们是否更新了密码。
我的Person表:
人表:
varchar(30) Name,
DateTime LastRenewedPassword.
代码:
public class Person
{
public string Name { get; set; }
public boolean HasRenewedPassword { get; set; }
}
public List<Person> GetPersons()
{
using(var context = Entities())
{
var persons = from p in contex.Persons
select new Person
{
Name = p.Name,
HasRenewedPassword = // Has the personer renewed the password for the last 24 hours?
}
}
}
我的问题是如何在select new{…}返回用户是否更新了密码?
感谢所有的帮助!对于解决这个问题,我愿意听取任何其他建议。
听起来你想要这样的东西:
// As noted in comments, there are serious problems with this approach
// unless you store everything in UTC (or local time with offset).
DateTime renewalCutoff = DateTime.UtcNow.AddHours(-24);
using(var context = Entities())
{
var persons = from p in context.Persons
select new Person
{
Name = p.Name,
HasRenewedPassword = p.LastRenewedPassword > renewalCutoff
};
}
(通过一次并在客户端评估DateTime.Now
,可能更容易在任何时候调试正在发生的事情-例如,您可以记录该查询参数。)
注意,由于您只做一个投影,您可以简化您的代码:
var persons = context.Persons.Select(p => new Person {
Name = p.Name,
HasRenewedPassword = p.LastRenewedPassword > renewalCutoff
});
嗯,我猜像:
var cutoff = DateTime.Now.AddDays(-1);
...
select new Person
{
Name = p.Name,
HasRenewedPassword = p.PasswordChanged >= cutoff
}
Try
select new Person
{
Name = p.Name,
HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalHours <= 24
}
您可以使用TimeSpan:
HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalHours <= 24
var renewalTime = DateTime.Now.Substract(new TimeSpan(24,0,0));
// insert in the select code
HasRenewedPassword = p.LastRenewedPassword > renewalTime
可以通过在select中添加一个简单的条件来设置此值,该条件检查自更新密码以来已经过了多少小时/天。使用时间跨度来验证经过的时间,如下所示:
var persons = from p in contex.Persons
select new Person
{
Name = p.Name,
HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalDays > 1;
}