我有如下表结构
员工表
ID Name
1 A
2 B
3 C
4 D
5 E
员工分配表
Alocationid ID Date
1 2 26/6/2013
2 2 25/6/2013
3 1 25/6/2013
4 1 24/6/2013
5 3 24/6/2013
6 4 26/6/2013
现在我需要获得特定日期的可用员工。例如,如果我需要可用的员工于2013年6月25日,那么结果如下: -
ID Name
1 A
3 C
4 D
答案 0 :(得分:0)
使用群组联接来获取每位员工的分配。然后选择那些在特定日期没有任何分配的员工:
from e in db.Employees
join ea in db.EmployeeAllocations
on e.ID equals ea.ID into g
where !g.Any(x => x.Date == date)
select e
答案 1 :(得分:0)
101 Linq是一个很好的参考网站,this sample似乎最适合您的情况。
答案 2 :(得分:0)
如果您正在使用存储库并希望使用较少的查询方法,则可以使用以下命令:
IQueryable<int> allocatedEmployeeIds = AllocationRepository.DbSet.Where(x => x.Date == referenceDate).Select(x => x.ID);
List<Employee> allocatedEmployees = EmployeeRepository.DbSet.Where(x => allocatedEmployeeIds.Any(y => y == x.ID).ToList();
编辑:如果你想要那些没有分配的,只需添加“!”
IQueryable<int> allocatedEmployeeIds = AllocationRepository.DbSet.Where(x => x.Date == referenceDate).Select(x => x.ID);
List<Employee> allocatedEmployees = EmployeeRepository.DbSet.Where(x => !allocatedEmployeeIds.Any(y => y == x.ID).ToList();