所以我目前正在使用 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
将用于实际时间 ins,而 Logstatus == 1
将用于实际超时。
任何想法都会有所帮助。
最佳答案
之所以会发生重复,是因为您仅根据用户 ID 加入表。您的代码无法根据日期区分它们。这就是为什么第一天的时间表与第一天和第二天数据的实际时间相结合。明天,当您有另一组实际值时,您将让每一行重复 3 次。
要修复它,请在两个表中添加另一个包含日期(日期、月份、年份)的字段,然后在加入时也考虑该字段
关于c# - DataGrid 不应该出现的重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54435202/