В настоящее время я создаю приложение посещаемости, но мне трудно сопоставить расписание, в котором нет журналов, чтобы пометить его как отсутствующее.
На данный момент мой стол выглядит так
На данный момент в таблице будет отображаться только то расписание, в котором есть журналы посещаемости. Поэтому я не вижу, есть ли расписание, которое сотрудник не показал, в котором он / она отсутствует.
Я пытался сопоставить его с нулем, но ничего не показывает.
Это мой код для заполнения таблицы
public void Main()
{
// works but not the midnight cross stuff
var final = (from a1 in EmployeeAttendanceLogs
join a2 in EmployeeAttendanceLogs on a1.ID equals a2.ID
join t1 in EmployeeScheduleList on a1.ID equals t1.ID
join t2 in EmployeeScheduleList on a2.ID equals t2.ID
join d1 in EmployeeDetails on t1.ID equals d1.EmployeeID
where ((a1.LogStatus == 0 && t1.In == t2.In) && (((((a1.ActualLog - t1.In ).Ticks) > TimeSpan.FromHours(1).Ticks) || t1.In.Date == a1.ActualLog.Date) && t1.In.Date == a1.ActualLog.Date )) && (a2.LogStatus == 1 && t1.Out == t2.Out && (t2.Out.Date == a2.ActualLog.Date) )
select new
{
User_ID = t1.ID,
Name = d1.EmployeeName,
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);
}
И это мои источники данных
Файл расписания сотрудников
Файл журнала посещаемости сотрудников
Судя по логам у Сотрудника 5 нет записи и это вывод в сетку
Так что это не отображается, но я также попытался настроить свой класс на логику
Класс расписания сотрудников
public class EmployeeSchedule
{
public int ID { get; set; }
private string _name;
public string Name
{ get
{
if (_name == null)
{
_name = "";
}
return _name;
}
set { _name = value; }
}
public string scheduleeIn { get; set; }
private string _actualIn;
public string actualIn
{
get
{
if (_actualIn == null)
{
_actualIn = "Absent";
}
return _actualIn;
}
set { _actualIn = value; }
}
public string scheduleOut { get; set; }
public string _actualOut;
public string actualOut
{
get
{
if (_actualOut == null)
{
_actualOut = "Absent";
}
return _actualOut;
}
set { _actualOut = value; }
}
private string _tardiness;
public string tardiness
{
get
{
if (_tardiness == null)
{
_tardiness = "Absent";
}
return _tardiness;
}
set { _tardiness = value; }
}
private string _workHours;
public string workHours
{
get
{
if (_workHours == null)
{
_workHours = "Absent";
}
return _workHours;
}
set { _workHours = value; }
}
}
Прошел уже день, я пытался это выяснить, но он, похоже, не появляется или не помечает расписание как отсутствующее.
Любые идеи или предложения будут очень полезны. Спасибо
Обновлено: Источники данных
Вот источник данных для моих журналов посещаемости
Журналы посещаемости
public class Actual
{
public int ID { get; set; }
public DateTime ActualLog { get; set; }
public int LogStatus { get; set; }
public DateTime date { get; set; }
}
График работы сотрудников
public class Emp1
{
public int ID { get; set; }
public DateTime In { get; set; }
public DateTime Out { get; set; }
}
@MehrdadDowlatabadi, не могли бы вы привести пример, если не возражаете?
чтобы помочь, не могли бы вы для начала показать нам какой-нибудь оператор SQL, который работает с БД, тогда мы могли бы помочь перевести его на Linq
@JohnB Я забыл упомянуть, что у меня нет БД, у меня просто есть два файла, а затем поместите их в список.
@JohnB Я просто получаю данные из двух файлов: файлов excel и .dat. затем поместите синицу в список. затем сравните их с помощью linq
JohnB: вы не должны начинать с оператора SQL, вы должны начать с правильных определений таблиц и правильных требований. Без них вы не знаете, вернет ли оператор SQL то, что вы хотите.





Кажется, внешнее соединение - это то, что вы ищете