使用linq查询和实体框架检索

时间:2013-06-27 08:52:25

标签: linq entity-framework-4.1

我有如下表结构

员工表

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

3 个答案:

答案 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();