首页 > 解决方案 > linq 中带有两个参数的 WHERE IN 子句

问题描述

当我有一个参数的 WHERE IN 时,我使用 Contains 但是当我有两个参数时它不起作用。我需要在 linq 中用 SQL 编写子查询:

SELECT ename, sal, deptno
FROM emp
WHERE (sal, deptno) IN
(SELECT MIN(sal), deptno
FROM emp
GROUP BY deptno);

var min = (from emp in Emps
                       group emp by new { Dzial = emp.Deptno} into grouped
                       select new
                       {
                           grouped.Key.Dzial,
                           wynik = grouped.Min(x => x.Sal)
                       });

            var result = (from emp in Emps
                          where min.Contains(emp.Deptno, emp.Sal)
                          select new
                          {
                              emp.Ename,
                              emp.Sal,
                              emp.Deptno
                          });

我试图将 Where 分成两个独立的部分,但这并没有改变任何东西。

标签: c#linq

解决方案


您应该简单地GroupBy然后使用SelectMany在Where中应用您的“IN”条件,如下所示:

var result = Emps.GroupBy(g => g.Deptno).SelectMany(a => a.Where(b => b.Sal == a.Min(c => c.Sal)));

我还在 DotNetFiddle 上准备了一个小例子: https ://dotnetfiddle.net/p8aYJv


推荐阅读