繁体   English   中英

如何使用Linq在列出的日期中查找日期,但不在其他地方

[英]How to use Linq to find dates in listed but not in another

我有两个列表对象:一个描述一个班次列表,另一个描述一个病假列表。

我想做的是比较这两个列表,并返回仅给出病假列表的结果,其中请假日期不在班次列表中。

我已经编写了这段代码,但是没有返回列表:

var nonAvailableDates =availability
   .Where(a=>! shiftDay.Any(b=>b.ShiftDate.Date == a.StartPeriod.Date)).ToList();

有人可以告诉我我哪里出问题了吗?

谢谢

您正在寻找集合差异运算,这是LINQ中的Except()方法(将为您提供第一个集合中所有不在第二个元素中的元素):

List<DateTime> shifts = new List<DateTime>{ DateTime.Parse("1/1/2014"), DateTime.Parse("1/2/2014")};
List<DateTime> sickLeaves = new List<DateTime>{DateTime.Parse("1/1/2014"), DateTime.Parse("1/3/2014")};

var sickLeavesThatAreNotAlsoShifts = sickLeaves.Except(shifts); // contains only 1/3/2014

编辑:给这个镜头。 我们基本上是先加入然后拿走没有匹配项的项目。

var sickLeavesNotInShifts = from sickLeave in sickLeaves
                            join shift in shifts on sickLeave.StartPeriod equals shift.ShiftDate into joinedShifts
                            from js in joinedShifts.DefaultIfEmpty()
                            where js == null
                            select sickLeave;

注意:这在渐近性上优于嵌套搜索,因为join在内部实现了哈希连接,即O(m + n)(m和n是两个集合的计数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM