我正在尝试将以下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代码会很棒!因此,对于itm_cd
表格中的每个CST
行,我希望所有行都返回到具有itm_cd
的最长生效日期,与eff_dt <= a certain date
一样长。我硬编码了今天的日期,以便我知道每一行应该回来,但我什么都没得到。
我在此网站上看到了很多子选项,但他们始终使用MAX
函数而WHERE
<=
个MAX
列{{1}}列。
答案 0 :(得分:5)
我现在无法对此进行真正的测试,但是这样的事情应该让你接近:
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 });