Boolean внутри Select () - PullRequest
       11

Boolean внутри Select ()

7 голосов
/ 10 октября 2011

У меня есть таблица персон, заполненная информацией о персонале. Я хотел бы получить список сотрудников внутри таблицы и проверить, обновили ли они свой пароль за последние 24 часа, а затем вернуть имя человека и логическое свойство независимо от того, обновили ли он пароль или нет.

Это моя личная таблица:

Персональный стол:

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 {...} вернуть, если пользователь обновил пароль или нет?

Вся помощь приветствуется! И я открыт для любых других предложений по решению этой проблемы.

Ответы [ 6 ]

8 голосов
/ 10 октября 2011

Похоже, вы хотите что-то вроде:

// 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
              });
7 голосов
/ 10 октября 2011

Ну, я угадал что-то вроде:

var cutoff = DateTime.Now.AddDays(-1);
...
 select new Person
  {
      Name = p.Name,
      HasRenewedPassword = p.PasswordChanged >= cutoff
  }
2 голосов
/ 10 октября 2011

Попробуйте

select new Person
{
         Name = p.Name,
         HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalHours <= 24
}
0 голосов
/ 10 октября 2011

Вы можете установить это значение, добавив к вашему выбору простое условие, которое проверяет, сколько часов / дней прошло с момента обновления пароля.Используйте промежуток времени для проверки истекшего времени, например:

var persons = from p in contex.Persons 
              select new Person 
              { 
                  Name = p.Name, 
                  HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalDays > 1;
              } 
0 голосов
/ 10 октября 2011
var renewalTime = DateTime.Now.Substract(new TimeSpan(24,0,0));

// insert in the select code
HasRenewedPassword = p.LastRenewedPassword > renewalTime
0 голосов
/ 10 октября 2011

Вы можете использовать TimeSpan:

HasRenewedPassword = (DateTime.Now - p.LastRenewedPassword).TotalHours <= 24
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...