Я создаю приложение посещаемости и ищу способ проверить, не заносятся ли в журнал их посещаемость в течение часа с их расписанием
Допустим, у Employee1 есть расписание на 31 января 2019 г. @ 00:30но он прибывает и регистрируется заранее, поэтому в его журналах указано, что он регистрируется 30 января 2019 г. в 23:45.Поэтому я пытаюсь выяснить, что если сотрудник войдет в систему в течение часа или часа позже, это будет его время входа в систему.Как будто он может войти в систему с 30 января 2019 года по 23:30 до 31 января 2019 года в 01:30.
На данный момент у меня есть еще 4 переменные DateTime, которые их обрабатывают, но это не таккажется, работает.
Так что это мой класс сотрудника
public class Emp1
{
public int ID { get; set; }
public DateTime In { get; set; }
public DateTime Out { get; set; }
public DateTime dateTime1 { get; set; }
public DateTime dateTime2 { get; set; }
public DateTime dateTime3 { get; set; }
public DateTime dateTime4 { get; set; }
}
мой Класс журналов фактической посещаемости
public class Actual
{
public int ID { get; set; }
public DateTime ActualLog { get; set; }
public int LogStatus { get; set; }
public DateTime date { get; set; }
}
Так что это мой код о том, как я заполняю свое расписание сотрудников
List<Emp1> em = new List<Emp1>();
foreach (DataRow row in empContainer.Rows)
{
em.Add(new Emp1()
{
ID = Convert.ToInt32(row[0].ToString()),
In = Convert.ToDateTime(row[1].ToString()),
Out = Convert.ToDateTime(row[2].ToString()),
dateTime1 = Convert.ToDateTime(row[1].ToString()).AddHours(1),
dateTime2 = Convert.ToDateTime(row[1].ToString()).AddHours(-1),
dateTime3 = Convert.ToDateTime(row[2].ToString()).AddHours(1),
dateTime4 = Convert.ToDateTime(row[2].ToString()).AddHours(-1)
});
}
И это мой текущий оператор LINQ для заполнения моей DataGrid
public void Main()
{
List<Emp1> emps;
List<Actual> actuals;
actuals = emp.GetActual(@"C:\Users\IT\Desktop\Sample\SampleActual.dat");
emps = GetEmpSched();
var final = (from a1 in actuals
join a2 in actuals on a1.ID equals a2.ID
join t1 in emps on a1.ID equals t1.ID
join t2 in emps on a2.ID equals t2.ID
where ((a1.LogStatus == 0) && (a2.LogStatus == 1)) && ((t1.In == t2.In) && (t1.Out==t2.Out)) && ((t1.dateTime1 > a1.ActualLog) && (a1.ActualLog > t1.dateTime2)) && ((t2.dateTime3 > a2.ActualLog) && (a2.ActualLog > t2.dateTime4))
select new
{
User_ID = t1.ID,
Scheduled_In = t1.In,
Actual_Login = a1.ActualLog,
Scheduled_Out = t2.Out,
Actual_Out = a2.ActualLog
}).Distinct(). ToList();
tbContainer = StaticClasses.ToDataTable(final);
dgvAttendance.ItemsSource = emp.CalculateEmployeeAttendance(tbContainer);
}
Это мой источник расписания сотрудников
А это мои журналы посещаемости сотрудников
Как вывидите, у меня есть 4 дополнительные переменные DateTime, которые я только что добавил, чтобы обрабатывать дополнительные или меньшие часы, но это все еще не работает, но я понятия не имею, почему.
И это текущий вывод
Так что мне не хватает данных из-за моих условий, которые должны работать нормально, но с ошибочными результатами.
Any ideas, почему это происходит?
Любые ответы, которые помогли бы мне, были бы великолепны.Спасибо