У меня проблема с использованием любого в linq я не знаю как это сделать правильно. Я должен написать это в linq:
SELECT ename, job, deptno
FROM emp
WHERE sal > ANY
(
SELECT DISTINCT sal
FROM emp
WHERE deptno = 30
);
Я пишу только это:
var min = (from emp in Emps
where emp.Deptno == 30
select emp.Sal
).Distinct();
var result = (from emp in Emps
where min.Any() > emp.Sal
select new
{
emp.Ename
});
Почему вы возвращаете диапазон минимальных значений? Похоже, что SQL получает единую минимальную заработную плату для отдела 30. Таким образом, запрос min должен заменить Distinct на .Min(x => x) или заменить where min.Any на min(x => x)
@ gunr2171 Да, и я должен использовать ЛЮБОГО оператора.
В Linq нет оператора любой / некоторые, как в Sql Server.
var salariesInTargetDepartment = Emps
.Where(x => x.Deptno == 30)
.Select(x => x.Sal)
.Distinct()
.ToList(); // the ToList is not required, but seeing you're going to be executing
// against this query many times, it will be better to cache the results.
var matchingEmployees = Emps
.Where(emp => salariesInTargetDepartment
.Any(target => emp.Sal > target)
);
Предложение where
во втором утверждении гласит: «Включать эту запись только в том случае, если свойство Sal
этой записи больше, чем хотя бы одна запись в коллекции salariesInTargetDepartment
».
Корректно ли это резюме вашего запроса? «Выбрать всех сотрудников, чья зарплата больше, чем хотя бы у одного другого сотрудника в отделе 30»