Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将EF列表对象转换为dateTime类型的arrayList_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc 3_Entity Framework 4_Entity Framework 6 - Fatal编程技术网

Asp.net mvc 如何将EF列表对象转换为dateTime类型的arrayList

Asp.net mvc 如何将EF列表对象转换为dateTime类型的arrayList,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-3,entity-framework-4,entity-framework-6,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 3,Entity Framework 4,Entity Framework 6,我正在处理请假申请。我需要获取排除的日期并将其转换为dateTime数组 我使用以下方法部分实现了这一点。我创建了一个Helper文件夹,然后将以下类添加到该文件夹中: namespace eLeave.Helpers { public class BusinessDaysCalculator { public int Calculate(DateTime startDate, DateTime endDate, DateTime[] holidays)

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

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

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;
        }
    }
}
该实现本来是要工作的,但在尝试使用下面的
holidays
DateTime Arrray时出现了错误

   DateTime[] holidays = new DateTime[3];
   holidays[0] = new DateTime(2017, 08, 15);
   holidays[1] = new DateTime(2017, 09, 1);    
我在上面的
holiday
数组中获得了包含排除日期的休假天数

我需要获取excludedates的值,并将其与我的类一起使用以使其正常工作

我在这里得到的错误如下:

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
类的数组不是类型
DateTime
-您需要一个
.Select()
子句来仅选择对象的
ExcludedDate
属性

将查询更改为

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

请注意,不清楚为什么属性可以为null(该属性没有
null
值,而且名称与表名的关系有点混乱。我建议您将其更改为
public DateTime Date{get;set;}

不清楚您的要求。使用
.ToArray()
是否将其转换为array@StephenMuecke:我已将问题编辑得更具体一些。但它已经是
DateTime[]
-这就是
.ToArray()
does@StephenMuecke我将这些值传递到下面函数BusinessDaysCalculator calc=new BusinessDaysCalculator()中的一个参数中;int days=calc.Calculate(StartDate、EndDate、excludedDates);我有错误…我必须更新我的问题以包含我的帮助程序类,这样您才能更好地理解。@StephenMuecke我已编辑了问题以包含我的类used@StephenMueke:我会做必要的调整。非常感谢!
DateTime[] excludedDates = _context.ExcludedDate
    .Where(d=>d.ExcludedDates >= StartDate && d.ExcludedDates <= EndDate)
    .Select(x => x.ExcludedDates)
    .ToArray();