如何将 EF List 对象转换为 dateTime 类型的 arrayList

How to convert EF List objects to an arrayList of type dateTime

我正在处理请假申请。我需要获取排除的日期并将其转换为 dateTime 数组。

我使用以下方法部分实现了这一点。我创建了一个 Helper 文件夹,然后将以下 class 添加到文件夹中:

namespace eLeave.Helpers
{
    public class BusinessDaysCalculator
    {
        public int Calculate(DateTime startDate, DateTime endDate, DateTime[] holidays)
        {
            startDate = FixStartDate(startDate);
            endDate = FixEndDate(endDate.Date);

            if (startDate > endDate)
                return 0;
            else
                return CalculateDifference(startDate, endDate, holidays);
        }



        private int CalculateDifference(DateTime startDate, DateTime endDate, DateTime[] holidays)
        {
            int difference = (int)(endDate - startDate).TotalDays;
            int weeks = difference / 7;
            if (endDate.DayOfWeek < startDate.DayOfWeek) weeks++;
            difference -= weeks * 2;
            difference -= HolidayCount(startDate, endDate, holidays);
            return difference + 1;
        }



        private int HolidayCount(DateTime startDate, DateTime endDate, DateTime[] holidays)
        {
            int holidayCount = 0;
            foreach (DateTime holiday in holidays)
            {
                if (HolidayInRange(startDate, endDate, holiday))
                    holidayCount++;
            }
            return holidayCount;
        }



        private DateTime FixStartDate(DateTime date)
        {
            if (date.DayOfWeek == DayOfWeek.Sunday)
                date = date.AddDays(1);
            else if (date.DayOfWeek == DayOfWeek.Saturday)
                date = date.AddDays(2);
            return date.Date;
        }



        private bool HolidayInRange(DateTime startDate, DateTime endDate, DateTime holiday)
        {
            return (holiday >= startDate
                && holiday <= endDate
                && holiday.DayOfWeek != DayOfWeek.Saturday
                && holiday.DayOfWeek != DayOfWeek.Sunday);
        }



        private DateTime FixEndDate(DateTime date)
        {
            if (date.DayOfWeek == DayOfWeek.Sunday)
                date = date.AddDays(-2);
            else if (date.DayOfWeek == DayOfWeek.Saturday)
                date = date.AddDays(-1);
            return date.Date;
        }
    }
}

我像下面这样实例化了 class 并将 excludedDate 传递给它,如下所示:

// Get the Excluded dates
var excludedDates = _context.ExcludedDate.Where(d=>d.ExcludedDates >= StartDate).Where(d=>d.ExcludedDates <= EndDate).ToArray();

BusinessDaysCalculator calc = new BusinessDaysCalculator();
int days = calc.Calculate(StartDate, EndDate, excludedDates);    

该实现本来是可以工作的,但出现了错误,但是当使用下面的 holidays DateTime Arrray

进行尝试时
   DateTime[] holidays = new DateTime[3];
   holidays[0] = new DateTime(2017, 08, 15);
   holidays[1] = new DateTime(2017, 09, 1);    

我得到了上面 holiday 数组中排除日期的休假天数

我需要获取 excludedDates 的值并将其与我的 class 一起使用以使其正常工作。

我在下面得到的错误:

Error   1   The best overloaded method match for 'eLeave.Helpers.BusinessDaysCalculator.Calculate(System.DateTime, System.DateTime, System.DateTime[])' has some invalid arguments  C:\Apps\WebApplications\eLeave\eLeave\eLeave\Controllers\RequestController.cs   100 32  eLeave


Error   2   Argument 3: cannot convert from 'eLeave.Models.ExcludedDate[]' to 'System.DateTime[]'   C:\Apps\WebApplications\eLeave\eLeave\eLeave\Controllers\RequestController.cs   100 67  eLeave

排除日期型号如下:

public class ExcludedDate
{
    public byte Id { get; set; }
    public DateTime? ExcludedDates { get; set; }
}

您的查询返回的 ExcludedDate class 数组不是 DateTime 类型 - 您需要一个 .Select() 子句来 select ExcludedDates 属性 的对象。

将查询更改为

DateTime[] excludedDates = _context.ExcludedDate
    .Where(d=>d.ExcludedDates >= StartDate && d.ExcludedDates <= EndDate)
    .Select(x => x.ExcludedDates)
    .ToArray();

请注意,不清楚为什么您的 属性 可以为 null(属性 的 null 值毫无意义,而且名称与table 名称。我建议您将其更改为 public DateTime Date { get; set; }