2012-03-02 2 views
0

linq와 함께이 쿼리를 어떻게 사용할 수 있습니까? EmployeeID는 다른 테이블입니다. 데시벨은 LINQ 데이터 컨텍스트를입니다linq을 사용하여 선택

select * 
from Employees where EmployeeID 
in (select ID from EmployeeIDs where ID between 3 and 7) 

답변

2
var result= (
     from e in db.Employees 
     where 
      (
       from eId in db.EmployeeIDs 
       where eId.ID>=3 && eId.ID<=7 
       select eId.ID 
      ).Contains(e.EmployeeID) 
     select e 
    ); 

또는 당신은 또한 이런 식으로 작업을 수행 할 수 있습니다

var result= db.Employees.Where(a=>a.EmployeeID>=3 && a.EmployeeID<=7); 

또는 당신은 또한 이런 식으로 작업을 수행 할 수 있습니다

var result= (
      from e in db.Employees 
      where 
       (
        from eId in db.EmployeeIDs 
        where eId.ID>=3 && eId.ID<=7 
        && e.EmployeeID==eId.ID 
        select eId.ID 
       ).Any() 
      select e 
     ); 
+0

작은 오타가 발생합니다

from emp in db.Employees join eid in db.EmployeeIDs on emp.EmployeeID equals eid.ID where emp.EmployeeID >= 3 && emp.EmployeeID <= 7 select emp 

은 ... –

+0

그래 난 그냥 고정. 죄송합니다. .. – Arion

+0

두 번째 것은 괜찮은 –

0

심지어 SQL에서도 중첩 된 문에서은 중복됩니다. 당신이 크기는 SQL Between 3 AND 7 In

SELECT * 
FROM Employees 
WHERE EmployeeID Between 3 and 7 

를 작성할 수

그래서 당신은 당신의 EF의 비춰볼 다음과 같이 쓸 수 Column >= 3 and Column <= 7

단지 문법 설탕입니다.

var results = from e in context.Employees 
       where EmployeeId >= 3 && EmployeeId <= 7 
       select e; 
+0

예를 들어, 직원 # 4 *가 EmployeeIDs *에 행이 없으면 그는 원래 쿼리에 나타나지 않지만 그는 자신의 것으로 나타납니다. –

1

는 조인을 원하는 것 같은데 :

당신이 정말로 두 테이블이 필요 경우의
var query = from emp in employees 
      join empId in employeeIds.Where(x => x.ID >= 3 && x.Id <= 7) 
       on emp.EmployeeID equals empID 
      select emp; 

. 반면에, 당신은 항상 employee.ID에 대한 employeeIds에 유효한 ID가있을 것이라고 가정 할 수 있다면 당신은 사용할 수 있습니다

var query = employees.Where(x => x.EmployeeID >= 3 && x.EmployeeID <= 7); 
0
예쁜 짧고 똑 바른 앞으로 조인을 사용하여

; 이것은 또한`<` & `>`수표 (읽기 쉽도록 편집) 중첩 선택하지 않고 꽤 제정신 똑바로 앞으로 SQL

SELECT * 
FROM Employees AS emp 
INNER JOIN EmployeeIDs AS eid ON emp.EmployeeID = eid.ID 
WHERE (emp.EmployeeID >= 3) AND (emp.EmployeeID <= 7) 
관련 문제