Выбрать с помощью linq - PullRequest
0 голосов
/ 02 марта 2012

Как я могу использовать этот запрос с linq. EmployeeIDs - это еще одна таблица.

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

Ответы [ 4 ]

2 голосов
/ 02 марта 2012
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
        );
1 голос
/ 02 марта 2012

Звучит так, будто вы хотите присоединиться:

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;

Это если вам действительно нужны две таблицы.С другой стороны, если вы можете предположить, что в employeeIds всегда будет действительный идентификатор для любого employee.ID, тогда вы можете просто использовать:

var query = employees.Where(x => x.EmployeeID >= 3 && x.EmployeeID <= 7);
0 голосов
/ 02 марта 2012

Довольно короткий и прямой, используя соединение;

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)
0 голосов
/ 02 марта 2012

Хорошо, даже в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...