将SQL查询(带有相关子查询)转换为C#中的LINQ

时间:2010-11-22 17:21:07

标签: c# sql linq

我正在寻找一些帮助将以下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

查询读取数据库中的所有活动资金及其最新单位值。基金表包含每个基金的记录。 FundUnit表包含每个基金每个日期的单位价值记录。之前日期的单位值也会保留在表格中以保留历史记录。

并非所有基金每天都会获得新的单位价值,因此所有基金的最新生效日期不一定相同。因此,max(effectivedate)函数需要应用于每个基金需要应用的单位表 - 因此相关的子查询。

由于

2 个答案:

答案 0 :(得分:6)

为了回答这个问题,我必须假设你的实体名称。

  

SELECT f.FundId,u。UnitValue FROM Fund   f INNER JOIN FundUnit u ON f.FundId =   u.FundId WHERE.EffectiveDate =   (SELECT MAX(有效日期)                            来自FundUnit k                            在哪里u.FundId = k.FundId)和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

我是从记忆中完成所有这些并没有测试它,可能会有一些小问题。如果我有时间,我会测试它。

答案 1 :(得分:0)

我认为这应该有所帮助:directly execute sql strings