我正在寻找一些帮助,将下面的sql查询转换为linq,并将其转换为c中的实体。

SELECT f.FundId, u.UnitValue
FROM Fund f
INNER JOIN FundUnit u ON f.FundId= u.FundId
WHERE u.EffectiveDate = (SELECT MAX(effectivedate)
                         FROM FundUnit k
                         WHERE u.FundId = k.FundId)
AND f.Active = 1
ORDER BY f.FundId

查询将读取数据库中的所有活动资金及其最新单位值。包含每个基金记录的基金表。fund unit表包含每个基金在每个日期的单位值记录。以前日期的单位值也保留在表中以保持历史记录。
并非所有基金每天都收到新的单位价值,因此所有基金的最新生效日期不一定相同。因此,需要将max(effectivedate)函数应用于units表,需要将其应用于每个基金,因此需要应用相关的子查询。
谢谢

最佳答案

为了回答这个问题,我必须假设你的实体的名字。
从fund中选择f.fundid,u.unitvalue
f内部连接fundunit u on f.fundid=
u.fundid,其中u.effectivedate=
(选择最大值(生效日期)
来自FundUnit K
其中u.fundid=k.fundid)和f.active=1
按f.fundid订购
我将假设一个基金实体和一个基金单位实体,就像这个例子一样。

var query = from f in Fund
            from u in FundUnit
            where f.FundId == u.FundId
            && u.EffectiveDate == (from k in FundUnit
                                   where u.FundId = k.FundId
                                   select EffectiveDate).Max()
            && f.Active == 1
            select new { Id = f.FundId, EffectiveDate = u.EffectiveDate } // Add any fields you need
            order by f.FundId

我是凭记忆做的,没有测试,可能有一些小问题。如果我有时间,我会测试的。

07-25 21:49