2010-11-22 133 views
6

我正在寻找一些帮助将以下SQL查询转换为LINQ到C#中的实体。将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)函数应用于需要针对每个基金应用的单位表 - 因此是相关的子查询。

感谢

回答

6

为了回答这个问题,我将不得不承担起你的实体的名称。

SELECT f.FundId,u.UnitValue FROM基金 ˚FINNER JOIN FundUnit U ON f.FundId = u.FundId WHERE u.EffectiveDate = (SELECT MAX(EFFECTIVEDATE) FROM FundUnitķ 其中U .FundId = k.FundId)AND f.Active = 1 ORDER BY 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 

我做了所有这些从内存中没有测试它,可能会有一些小问题。如果我有时间,我会测试它。

0

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

+0

对不起,我看到它是linq的实体。相同的原则适用:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – Kell 2010-11-22 17:26:41