Linq发布了两个表和一个集合

时间:2014-04-06 11:08:11

标签: c# asp.net linq

好的,我可能需要一些帮助,因为我真的很喜欢linq!

此集合包含给定日期的x个时隙DTO。

List<TimeslotDto> timeSlots = new List<TimeslotDto>();

TimeslotDto 包含DateTime SlotStart 属性和bool IsReserved 。这个集合有效,它包含了我想要的时隙数。细

现在我的问题。我想在linq查询中使用此集合。 我有两个表,“员工”和“时间段”(实际上有三个,但如果我得到帮助,我可以将最后一个表添加到查询中自己)

时间段”表包含:

  • StaffId(FK)
  • TimeslotId(PK)
  • SlotStart
  • ActivityId(FK第三张表)。

员工”表格包含:

  • StaffId(PK)
  • Timeslots的导航属性

基于此...我希望产生一个结果,每个工作人员都有一个 timeSlots 列表,对于那些在Timeslots表中具有相同日期的集合中的那些插槽< strong> IsReserved prop应该设置为true。

因此timeSlots集合包含任何给定日期的所有可能的插槽。 Timeslots表包含预订。我想x检查收藏品,找到每个工作人员的预订。

提前致谢!

如果某人有关于掌握linq的非常好的教程,请分享。

1 个答案:

答案 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是每个员工。