好的,我可能需要一些帮助,因为我真的很喜欢linq!
此集合包含给定日期的x个时隙DTO。
List<TimeslotDto> timeSlots = new List<TimeslotDto>();
TimeslotDto 包含DateTime SlotStart 属性和bool IsReserved 。这个集合有效,它包含了我想要的时隙数。细
现在我的问题。我想在linq查询中使用此集合。 我有两个表,“员工”和“时间段”(实际上有三个,但如果我得到帮助,我可以将最后一个表添加到查询中自己)
“时间段”表包含:
“员工”表格包含:
基于此...我希望产生一个结果,每个工作人员都有一个 timeSlots 列表,对于那些在Timeslots表中具有相同日期的集合中的那些插槽< strong> IsReserved prop应该设置为true。
因此timeSlots集合包含任何给定日期的所有可能的插槽。 Timeslots表包含预订。我想x检查收藏品,找到每个工作人员的预订。
提前致谢!
如果某人有关于掌握linq的非常好的教程,请分享。
答案 0 :(得分:0)
您可以使用Contains
语句:
var query = timeSlots.Where(sl => TimeSlots.Where(t => t.StaffId == staffId)
.Select(t => t.SlotStart)
.Contains(sl.SlotStart));
如果timeSlots
仅包含该特定员工的时间段,则可以(稍微)更好地扩展。
在查询语法中,这看起来像
var query = from sl in timeSlots
where (from t in TimeSlots
where t.StaffId == staffId
select(t => t.SlotStart))
.Contains(sl.SlotStart);
另一个选择是将TimeSlots
放入内存并加入timeSlots
。 (您无法使用LINQ将本地集合连接到SQL后端。)
from sl in timeSlots
join t in TimeSlots.Where(x => x.StaffId == staffId)
.AsEnumerable() // Switch to memory
on ts.SlotStart equals t.SlotStart
再次假设timeSlots
是每个员工。