Как передать список записей в метод и пропустить все пропущенные записи - PullRequest
0 голосов
/ 15 апреля 2019

Это мой Attendance класс

public class EmployeeAttendance
{
    public string Employee { get; set; }
    public DateTime Date { get; set; }
    public string EmployeeClockTimeId { get; set; }
}

Логика

        List<EmployeeAttendance> attendancesPerDay = new List<EmployeeAttendance>();
        List<EmployeeAttendance> employeeAttendances = new List<EmployeeAttendance>();
        foreach (var attendance in employeeAttendances)
        {
            if (attendancesPerDay.Contains(attendance))
            {
                continue;
            }
            attendancesPerDay = employeeAttendances.Where(x => x.Date == DateTime.Now.Date && x.EmployeeClockTimeId == 12.ToString()).ToList();
            Validation(attendancesPerDay);
        }

У меня будет employeeAttendances.это включает в себя все посещаемость работника в зависимости от даты.Это будет большой список.Мне нужно отправить набор записей в метод проверки в течение дня и empid.Я достигаю этого с помощью приведенного выше кода.но это занимает много времени.Есть ли лучший способ сделать это, как пропустить все записи AttendancesPerDay, а не идти по очереди в цикле.

Примечание: за один день будет несколько записей, как каждый раз, когда emp выходил и входил. Допустим, 20 записей.Я хочу, чтобы все 20 записей отправили его на проверку.и следующая итерация должна быть 21 запись.но сейчас я просто продолжаю до этого момента

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

вы можете использовать IEnumerable<TSource>.Except метод в linq и импелмент IEqualityComparer<EmployeeAttendance> для вашего EmployeeAttendance класса.

public class EmployeeAttendanceEqualityComparer : IEqualityComparer<EmployeeAttendance>
    {
        public bool Equals(EmployeeAttendance x, EmployeeAttendance y)
        {
            if (x == null || y == null)
                return false;

            // check your equality same as this
            return x.Employee == y.Employee;
        }

        public int GetHashCode(EmployeeAttendance obj)
        {
            // or something else
            return 12;
        }
    }

и изменить свою логику на эту

var currentTime = DateTime.Now;

var attendancesPerDay = new List<EmployeeAttendance>
{
    new EmployeeAttendance { Date = currentTime, Employee = "1", EmployeeClockTimeId = "11" },
    new EmployeeAttendance { Date = currentTime, Employee = "2", EmployeeClockTimeId = "12" },
    new EmployeeAttendance { Date = currentTime, Employee = "3", EmployeeClockTimeId = "13" },
    new EmployeeAttendance { Date = currentTime, Employee = "4", EmployeeClockTimeId = "14" },
    new EmployeeAttendance { Date = currentTime, Employee = "5", EmployeeClockTimeId = "15" },
};

var employeeAttendances = new List<EmployeeAttendance>
{
    new EmployeeAttendance { Date = currentTime, Employee = "1", EmployeeClockTimeId = "11" },
    new EmployeeAttendance { Date = currentTime, Employee = "2", EmployeeClockTimeId = "12" },
    new EmployeeAttendance { Date = currentTime, Employee = "3", EmployeeClockTimeId = "13" },
};

var result = attendancesPerDay
    .Except(employeeAttendances, new EmployeeAttendanceEqualityComparer())
    .Where(x => x.Date == DateTime.Now.Date && x.EmployeeClockTimeId == "12").ToList();

foreach (EmployeeAttendance employeeAttendance in result)
{
    Validation(employeeAttendance);
}
0 голосов
/ 15 апреля 2019

Я слишком много думал, может быть. вот почему я пропустил эту простую вещь. Я в конечном итоге использовать, как это

        for (int i = 0; i < EmployeeAttandance.Count; i++)
        {
            var attendancesPerDay = EmployeeAttandance.Where(x => x.Date.Date == EmployeeAttandance[i].Date.Date && x.EmployeeClockTimeID == EmployeeAttandance[i].EmployeeClockTimeID).ToList();
            Validation(attendancesPerDay);
            i = EmployeeAttandance.IndexOf(attendancesPerDay[attendancesPerDay.Count - 1]);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...