【问题标题】:LINQ Expression for IN clause with Largest Date具有最大日期的 IN 子句的 LINQ 表达式
【发布时间】:2019-04-21 14:50:57
【问题描述】:

我有以下查询需要写成 LINQ

select * from sales s 
where area in ('f1','f2','f3') and sdate =(select max(sdate) from sales ss where ss.area= s.area)

我对最大日期感到困惑。

我当前的代码:

        var maxDate = (from A in _context.sales
                       where inputArray.Contains(A.area)
                       select A.sdate)
                       .Max();
        var Model =
        (from A in _context.sales
         where inputArray.Contains(A.area) && A.sdate== maxDate  
         select ...)

【问题讨论】:

    标签: mysql sql linq


    【解决方案1】:

    谈论

    sdate =(select max(sdate) from sales ss where ss.area= s.area)
    

    条件,或更准确地说

    s.sdate = (select max(ss.sdate) from sales ss where ss.area = s.area)
    

    您可以使用几乎相同的子查询语法 - 只是 Max 应该在 LINQ 查询语法 之外,或者只对那部分使用 LINQ 方法语法,例如要么

    from s in _context.sales
    where inputArray.Contains(s.area)
        && s.sdate == (from ss in _context.sales where ss.area == s.area select  ss.sdate).Max()
    

    where inputArray.Contains(s.area)
        && s.sdate == _context.sales.Where(ss => ss.area == s.area).Max(ss => ss.sdate)
    

    【讨论】:

      【解决方案2】:

      表达式 x => list.Contains(x) 将转换为 IN sql 查询

      var list = new List<string>{"f1","f2","f3"};
      var query = context.Sales
                  .Where(x => list.Contains(x.Area))
                  .GroupBy(x => x.Area)
                  .Select(x => x.OrderByDescending(y=>y.sDate).First());
      

      【讨论】:

      • 我知道了。我对最大日期感到困惑。目前我在一个变量中取了最大日期并添加到 where 子句中的 and 条件中。我可以有任何直接的选择吗?我更新了我当前的代码
      • 尝试使用 groupBy 函数和 OrderByDescending 按日期,然后从每个组中选择第一个
      猜你喜欢
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多