因此,我目前正在使用C# WPF
创建一个AttendanceApp。我有一个DataGrid
,它会自动从两个文件中显示并计算出勤指标,这两个文件来自出勤文件和实际出勤日志。
我尝试通过UserID
来匹配两个文件,但是有效,但是当我开始处理1天以上时。我得到重复和错误的数据。
目前我只有5个用户的2天数据,但是#1用户已经有8个列表,而2个用户的出勤时间应该只有2个
但是当数据仅够1天时,数据看起来是正确的
所以我的DataGrid
上有重复和错误的数据
这是我的数据来源
员工时间表
员工出勤记录
这是我用来填充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)
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);
}
如您所见,我已经添加了Distinct()
来尝试过滤掉它。
出勤记录的工作方式就像是一次进入零,或者一次进入超时。
所以我两次声明emps
进行过滤,以便所有LogStatus == 0
都用于实际时间输入,而Logstatus == 1
将是实际时间输入。
任何想法都会有所帮助。
答案 0 :(得分:1)
正在发生重复,因为您仅基于用户的ID来联接表。您的代码无法根据日期区分它们。这就是为什么第一天的时间表与第一天的实际时间和第二天的数据都结合在一起的原因。明天,当您拥有另一组实际值时,您将让每一行重复三遍。
要解决此问题,请在两个表中都添加一个包含日期(日期,月,年)的字段,然后在加入时也考虑该字段