2012-03-02 70 views
0

我如何使用linq查詢。 EmployeeIDs是另一個表。選擇使用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 
    ); 

其中db是LINQ數據上下文

,或者您也可以做這樣的:

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

小錯字在你的''<' & '> ...檢查啊 – 2012-03-02 09:16:15

+0

我只是固定它。 。對不起。 – Arion 2012-03-02 09:18:52

+0

第二個是不好的 – 2012-03-02 09:19:35

0

那麼即使在SQL中,嵌套SELECT中的IN聲明是多餘的。

你可以只寫

SELECT * 
FROM Employees 
WHERE EmployeeID Between 3 and 7 

在SQL Between 3 AND 7Column >= 3 and Column <= 7

只是語法糖所以,你可以寫對你的EF語境下。

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

實際上,如果員工#4 *在EmployeeIDs *中沒有一行,他將不會顯示在原始查詢中,但他會在您的。 – 2012-03-02 11:03:26

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; 

那是,如果你真的需要兩個表。在另一方面,如果你可以假設,總是會有一個有效ID在employeeIds任何employee.ID那麼你可以使用:

var query = employees.Where(x => x.EmployeeID >= 3 && x.EmployeeID <= 7); 
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 

這也將導致沒有嵌套選擇已相當健全和直接的SQL(編輯以可讀性)

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