gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:59 25 4
gpt4 key购买 nike

所以我目前正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com