我如何使用linq查詢。 EmployeeIDs是另一個表。選擇使用linq
select *
from Employees where EmployeeID
in (select ID from EmployeeIDs where ID between 3 and 7)
我如何使用linq查詢。 EmployeeIDs是另一個表。選擇使用linq
select *
from Employees where EmployeeID
in (select ID from EmployeeIDs where ID between 3 and 7)
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
);
那麼即使在SQL中,嵌套SELECT
中的IN
聲明是多餘的。
你可以只寫
SELECT *
FROM Employees
WHERE EmployeeID Between 3 and 7
在SQL Between 3 AND 7
是Column >= 3 and Column <= 7
只是語法糖所以,你可以寫對你的EF語境下。
var results = from e in context.Employees
where EmployeeId >= 3 && EmployeeId <= 7
select e;
實際上,如果員工#4 *在EmployeeIDs *中沒有一行,他將不會顯示在原始查詢中,但他會在您的。 – 2012-03-02 11:03:26
聽起來像是你想加入:
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);
很短,直截了當使用連接;
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)
小錯字在你的''<' & '> ...檢查啊 – 2012-03-02 09:16:15
我只是固定它。 。對不起。 – Arion 2012-03-02 09:18:52
第二個是不好的 – 2012-03-02 09:19:35