DataGrid重复数据,这些数据不应出现

时间:2019-01-30 07:20:08

标签: c# wpf linq xaml wpfdatagrid

因此,我目前正在使用C# WPF创建一个AttendanceApp。我有一个DataGrid,它会自动从两个文件中显示并计算出勤指标,这两个文件来自出勤文件和实际出勤日志。

我尝试通过UserID来匹配两个文件,但是有效,但是当我开始处理1天以上时。我得到重复和错误的数据。

目前我只有5个用户的2天数据,但是#1用户已经有8个列表,而2个用户的出勤时间应该只有2个

重复条目 DataGrid View1

但是当数据仅够1天时,数据看起来是正确的

一天的出勤 DataGrid View2

所以我的DataGrid上有重复和错误的数据

这是我的数据来源

员工时间表

Employee Schedule

员工出勤记录

Employee Attendance Logs

这是我用来填充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将是实际时间输入。

任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

正在发生重复,因为您仅基于用户的ID来联接表。您的代码无法根据日期区分它们。这就是为什么第一天的时间表与第一天的实际时间和第二天的数据都结合在一起的原因。明天,当您拥有另一组实际值时,您将让每一行重复三遍。

要解决此问题,请在两个表中都添加一个包含日期(日期,月,年)的字段,然后在加入时也考虑该字段