我正在寻找一些帮助将以下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
Run Code Online (Sandbox Code Playgroud)
查询将读取数据库中的所有活动资金及其最新单位值.基金表包含每个基金的记录.FundUnit表包含每个基金每个日期的单位价值记录.之前日期的单位值也会保留在表格中以保留历史记录.
并非所有基金每天都会获得新的单位价值,因此所有基金的最新生效日期不一定相同.因此最大(EFFECTIVEDATE)功能需要被施加到表需要每基金要施加的单位 - 因此相关子查询.
谢谢
为了回答这个问题,我将不得不假设您的实体名称.
SELECT f.FundId,u.UnitValue FROM Fund f INNER JOIN FundUnit u ON f.FundId = u.FundId WHERE.EffectiveDate =(SELECT MAX(validdate)FROM FundUnit k WHERE u.FundId = k.FundId)AND f.Active = 1订购f.FundId
我将假设一个基金实体和一个FundUnit实体,就像这个例子一样.
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
Run Code Online (Sandbox Code Playgroud)
我从内存中做了所有这些并没有测试它,可能会有一些小问题.如果我有时间,我会测试它.