【问题标题】:SQL TO LINQ Where In Clause with MaxSQL TO LINQ Where In 子句与 Max
【发布时间】:2019-09-09 16:24:48
【问题描述】:

我想将以下查询转换为等效的 LINQ。我已经通过this,但无法获得 Max 的结果。任何人都可以在这方面帮助我。

下面是我的 SQL 查询:

select max(a.amount_limit) as AmountLimit from tbl_AmountEmpRole a where a.Role_Name in(select b.Role_name from tbl_UserRoles b where Emp_id=4) 

提前致谢

【问题讨论】:

  • 您能否显示您当前的 linq 代码,即使它还没有使用 max

标签: c# asp.net asp.net-mvc entity-framework linq


【解决方案1】:

假设有一个名为 context 的变量,这应该可以工作:

context.tbl_AmountEmpRole
.Where(er => context.tbl_UserRoles.Where(ur => ur.Emp_id == 4).Select(ur => ur.Role_Name).Contains(er.Role_Name))
.Max(er => er.amount_limit);

但是,我相信您可以使用JOIN 重写您的查询:

SELECT MAX(a.amount_limit) as AmountLimit FROM tbl_AmountEmpRole a 
INNER JOIN tbl_UserRoles b 
ON a.Role_Name = b.Role_Name
WHERE b.Emp_id = 4

在这种情况下,您可以使用Join 方法:

context.tbl_AmountEmpRole.Join(context.tbl_UserRoles, er => er.Role_Name, ur => ur.Role_Name, new { er, ur })
.Where(j => j.ur.Emp_id = 4)
.Max(j => j.er.amount_limit);

确保仔细检查语法和签名。这是我凭记忆写的。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

     var role_names=tbl_UserRoles.Where(x=> x.Emp_id==4).Select(x=>x.Role_name);
     var MaxacountLimit=tbl_AmountEmpRole.Where(y=>role_names.contains(y))
     .Max(z=>z.amount_limit);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2010-10-25
      • 2023-01-13
      • 2010-09-23
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多