Asp.net mvc 如何将EF列表对象转换为dateTime类型的arrayList
我正在处理请假申请。我需要获取排除的日期并将其转换为dateTime数组 我使用以下方法部分实现了这一点。我创建了一个Helper文件夹,然后将以下类添加到该文件夹中: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)
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();