c# - 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 分成两个独立的部分,但这并没有改变任何东西。
解决方案
您应该简单地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
推荐阅读
- mysql - 是否可以通过比较两个表来更新触发器中的值?
- mysql - MySQL 按另一个表的 min 更新一个表
- css - CSS背景颜色在Safari中不起作用
- python - 如何在 Python 中调用函数内部的函数
- android - 暂停开放测试后,我的应用的 Google Play 评论是否会公开显示?
- discord - 向服务器的所有成员添加角色的代码
- statistics - 我想知道我所做的统计分析是否有意义
- elasticsearch - 在弹性搜索上不起作用的术语
- android - 未处理的异常:键入“列表”
' 不是 'String' 类型的子类型 无法获取 json 数据 - swift - 视图中的 AVFoundation 摄像头