LINQ SELECT,在SUBQUERY中使用Max和Where

本文关键字:Max Where SELECT SUBQUERY LINQ | 更新日期: 2023-09-27 17:59:41

我正试图将以下SQL语句编码到LINQ中,但很吃力。以下是SQL语句:

SELECT C.ITM_CD, C.BUY_QTY, C.COST
  FROM CST C
 WHERE C.eff_dt IN (SELECT MAX (D.eff_dt)
                      FROM CST D
                     WHERE D.itm_cd = C.itm_cd
                       AND D.eff_dt <= '22-APR-2014')
 ORDER BY C.itm_cd

这是我的LINQ尝试,它没有带来任何回报,尽管每个eff_dt的日期都比今天的日期少,请记住,在我的"真实"程序中,这个日期会改变。

var results = from c in Csts
              let MaxEffDate = (from d in Csts
                                where d.EffDt <= DateTime.Parse("04/22/2014").Date
                                   && d.ItmCd == c.ItmCd
                                select d.EffDt).Max()
              where c.EffDt.Equals(MaxEffDate)
              select new
              {
                  c.ItmCd,
                  c.BuyQty,
                  c.Content
              };

Lambda代码会很棒!因此,对于CST表中的每一个itm_cd行,我希望所有具有该itm_cdeff_dt <= a certain date的最大生效日期的行都返回。我硬编码了今天的日期,这样我就知道每一排都应该回来,但我一无所获。

我在这个网站上看到了很多子选择,但它们总是使用MAX函数,而没有<=WHERE子句用于MAX列。

LINQ SELECT,在SUBQUERY中使用Max和Where

我现在还不能真正测试它,但像这样的东西应该可以让你接近:

var results = Csts.Where(d => 
                         d.EffDt == Csts.Where(x => 
                                               x.ItmCd == d.ItmCd && 
                                               x.EffDt <= DateTime.Now)
                                        .Max(x => x.EffDt))
                  .OrderBy(d => d.ItmCd)
                  .Select(d => new { d.ItmCd, d.BuyQty, d.Content });