Select()中的布尔值



我有一个填满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;
              } 

最新更新