2013-06-27 38 views
-1

我有這樣的表結構如下檢索使用LINQ查詢的EntityFramework

EMPLOYEE表

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 

現在我需要獲得可用的員工特定日期。例如,如果我需要25/6/2013的可用員工,那麼結果將如下所示: -

ID Name 
1 A 
3 C 
4 D 
+1

到目前爲止您嘗試過什麼嗎? –

+0

@subash下次請指定語言併發布一些您已有的代碼 –

+0

@subash我不明白爲什麼結果是25/6/2013的A/C/D,而不是A/B? –

回答

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 
+0

嗨,這不是我預期的。上述查詢返回所有已經分配給日期的員工..我需要所有爲日期分配的員工 – subash

+0

@subash不清楚問題。更新 –

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