c# - DataGrid 不应该出现的重复数据

标签 c# wpf linq xaml wpfdatagrid

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

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

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

重复条目 DataGrid View1

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

一天的出勤值(value) 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 将用于实际时间 ins,而 Logstatus == 1将用于实际超时。

任何想法都会有所帮助。

最佳答案

之所以会发生重复,是因为您仅根据用户 ID 加入表。您的代码无法根据日期区分它们。这就是为什么第一天的时间表与第一天和第二天数据的实际时间相结合。明天,当您有另一组实际值时,您将让每一行重复 3 次。

要修复它,请在两个表中添加另一个包含日期(日期、月份、年份)的字段,然后在加入时也考虑该字段

关于c# - DataGrid 不应该出现的重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54435202/

相关文章:

c# - Entity Framework 中的 Linq 查询优化

C# OleDbCommand 连接属性

c# - SQL Server 和 C# WinForms 错误

c# - WPF XAML 绑定(bind)不更新

c# - LINQ Max() 函数执行速度超慢

C# LINQ - Union() Group()-results

c# - 是否可以将 IList<ArraySegment<byte>> 转换为 byte[] 而无需枚举列表并添加到新的 byte[]?

wpf - WPF 中的可聚焦面板

wpf - 通过单击按钮更改 XAML 中某些内容的属性

c# - 返回匿名类型的简单方法(使使用 LINQ 的 MVC 成为可能)