具有最大日期的IN子句的LINQ表达式

时间:2018-11-19 09:08:19

标签: mysql sql linq

我有以下查询,需要写为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 ...)

2 个答案:

答案 0 :(得分:1)

谈论

With Worksheets("Filter")
    .Range(.Cells(2, 1), .Cells(VarAnzahlZeilen, VarAnzahlSpalten)).RemoveDuplicates Columns:=Array(1), Header:=xlNo
End With

条件,或更准确地说

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) 应该在LINQ 查询语法之外,或者只使用LINQ 方法语法 ,例如要么

Max

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

答案 1 :(得分:0)

表达式x =>列表。包含(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());