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_cd
和eff_dt <= a certain date
的最大生效日期的行都返回。我硬编码了今天的日期,这样我就知道每一排都应该回来,但我一无所获。
我在这个网站上看到了很多子选择,但它们总是使用MAX
函数,而没有<=
的WHERE
子句用于MAX
列。
我现在还不能真正测试它,但像这样的东西应该可以让你接近:
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 });