linq表达式

7vhp5slm  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(385)

我有下面的查询需要写为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 ...)
67up9zun

67up9zun1#

谈论

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)
lrpiutwd

lrpiutwd2#

表达式x=>list.contains(x)将在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());

相关问题