如何将 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; }
我正在处理请假申请。我需要获取排除的日期并将其转换为 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; }