Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
C# 从日期时间列表c中排除日期列表_C#_List_Datetime - Fatal编程技术网

C# 从日期时间列表c中排除日期列表

C# 从日期时间列表c中排除日期列表,c#,list,datetime,C#,List,Datetime,我一直试图从日期时间列表中排除日期列表,情况是 //LATES APPROVED LIST var lateReq = (from mk in db.Late where mk.EmpID == EmployeeRec.EmpId && mk.TeamLeadAppr == 1 && mk.DeptLeadAppr == 1 select mk).ToList(); List<DateTime> latesApproved = new Li

我一直试图从日期时间列表中排除日期列表,情况是

//LATES APPROVED LIST
 var lateReq = (from mk in db.Late
 where mk.EmpID == EmployeeRec.EmpId
 && mk.TeamLeadAppr == 1 && mk.DeptLeadAppr == 1
 select mk).ToList();

 List<DateTime> latesApproved = new List<DateTime>();
 List<LateRequest> lateRequest = new List<LateRequest>();

 foreach (var gk in lateReq)
 {
 latesApproved.Add(gk.lateDate.Value);
 }


//here lets say there is a date in latesApproved i.e. 13/3/2018 12:00:00 AM


//now in the `lateComings` list there are datetimes i.e. 13/3/2018 10:26:35 AM
 //exclude the lates approved list from the lateComings list
 List<DateTime> LateComingList = lateComings.ToList();
//我需要与datetime的最终清单,因为我有进一步的工作与清单的时间部分如下

 //list of time differences 
 var timeDiff = new List<TimeSpan>();

 foreach (DateTime ts in lateComings)
 {

 if (ts.TimeOfDay > AT)//TimeSpan.FromHours(AT)
 {
 timeDiff.Add(ts.TimeOfDay - AT);//TimeSpan.FromHours(AT));
 }
 }

 countLates = lateComings.Count();
 //fetching the minutes from the above list which is in the format of 02:43:00


 var minutesList = timeDiff.Select(t => Convert.ToInt32(t.TotalMinutes)).ToList();
对于水晶图片

最新核准名单

2018年3月1日12:00:00:AM

2018年3月5日12:00:00:AM

2018年3月9日12:00:00:AM

2018年3月13日12:00:00:AM

迟到名单

2018年3月5日11:00:32:AM

2018年3月6日10:54:33:AM

2018年3月7日08:34:47:AM

2018年3月8日12:30:40:AM

2018年3月9日10:03:00:AM

2018年3月10日11:03:00:AM

2018年3月11日11:30:40:AM

2018年3月12日10:30:40:AM

2018年3月13日08:30:00:AM

一些最终列表应该如下所示:

2018年3月6日10:54:33:AM

2018年3月7日08:34:47:AM

2018年3月8日12:30:40:AM

2018年3月10日11:03:00:AM

2018年3月11日11:30:40:AM


2018年3月12日10:30:40:AM

这里的问题是,当您运行Except时,它会查看实际日期时间值,并考虑时间,因此它不会与其他任何内容匹配。您需要使用重载,该重载需要一个相等比较器,以确保它们在日期级别得到相同的处理。考虑以下事项:

// class Program : IEqualityComparer<DateTime> // place something like this at the class definition.
bool IEqualityComparer<DateTime>.Equals(DateTime x, DateTime y)
{
    return x.Date == y.Date; // Compare the dates and not the times.
}

int IEqualityComparer<DateTime>.GetHashcode(DateTime obj)
{
    return obj.Date.GetHashCode();
}
您需要将其替换为您使用的类的实例

更新 为了使其工作,您的一个类通常是需要进行比较的类,您必须实现该接口。假设您的类名为LateArrivalController,这就是更改定义的方式

public class LateArrivalController : Controller, IEqualityComparer<DateTime>

这看起来像是为我做的工作:

        List<DateTime> latesApproved = new List<DateTime>
        {
            Convert.ToDateTime("01/03/2018 12:00:00"),
            Convert.ToDateTime("05/03/2018 12:00:00"),
            Convert.ToDateTime("09/03/2018 12:00:00"),
            Convert.ToDateTime("13/03/2018 12:00:00")
        };

        List<DateTime> lateComings = new List<DateTime>
        {
            Convert.ToDateTime("05/03/2018 11:00:32"),
            Convert.ToDateTime("06/03/2018 10:54:33"),
            Convert.ToDateTime("07/03/2018 08:34:47"),
            Convert.ToDateTime("08/03/2018 12:30:40"),
            Convert.ToDateTime("09/03/2018 10:03:00"),
            Convert.ToDateTime("10/03/2018 11:03:00"),
            Convert.ToDateTime("11/03/2018 11:30:40"),
            Convert.ToDateTime("12/03/2018 10:30:40"),
            Convert.ToDateTime("13/03/2018 08:30:00")
        };

        List<DateTime> dateTimes = lateComings
            .Where(x => !latesApproved
                .Select(a => a.Date)
                .Contains(x.Date))
            .ToList();

你只是想从迟到名单中找到所有不在批准名单中的人吗?我不清楚,你到底有什么问题。看起来你有一个从DateTime中删减时间的解决方案,我认为这应该可以解决这个问题。为什么不起作用?还有什么问题?在时间位处理中,您真的需要进行这些差异计算吗?您不能在代码中只使用DateTime字段的日期部分吗?在我看来,不管怎样,你只是减少了小时部分。事实上,我想要所有的约会时间,除了在latesApproved@CsabaBenko修剪时间部分解决了问题,但我不想修剪它,因为我需要在代码的下一部分中使用它。我添加了与您的测试数据@Mickjohn'StatController.IEqualityComparer.EqualsDateTime一起工作的代码,DateTime”:包含类型未实现接口“IEqualityComparer”错误CS0540“StatsController.GetHashcodeDateTime”:包含类型未实现接口“IEqualityComparer”错误CS0539“StatsController.GetHashcodeDateTime”显式接口声明中的接口“IEqualityComparer”不是接口的成员。您发布时,我正在编辑答案这将包括关于此的说明。看一看。我正在使用asp.NETMVC
public class LateArrivalController : Controller, IEqualityComparer<DateTime>
var lateComingsWithoutApproved = LateComingList.Except(latesApproved, this).ToList();
        List<DateTime> latesApproved = new List<DateTime>
        {
            Convert.ToDateTime("01/03/2018 12:00:00"),
            Convert.ToDateTime("05/03/2018 12:00:00"),
            Convert.ToDateTime("09/03/2018 12:00:00"),
            Convert.ToDateTime("13/03/2018 12:00:00")
        };

        List<DateTime> lateComings = new List<DateTime>
        {
            Convert.ToDateTime("05/03/2018 11:00:32"),
            Convert.ToDateTime("06/03/2018 10:54:33"),
            Convert.ToDateTime("07/03/2018 08:34:47"),
            Convert.ToDateTime("08/03/2018 12:30:40"),
            Convert.ToDateTime("09/03/2018 10:03:00"),
            Convert.ToDateTime("10/03/2018 11:03:00"),
            Convert.ToDateTime("11/03/2018 11:30:40"),
            Convert.ToDateTime("12/03/2018 10:30:40"),
            Convert.ToDateTime("13/03/2018 08:30:00")
        };

        List<DateTime> dateTimes = lateComings
            .Where(x => !latesApproved
                .Select(a => a.Date)
                .Contains(x.Date))
            .ToList();