【问题标题】:Convert SQL Query (with Correlated Subquery) to LINQ in C#在 C# 中将 SQL 查询(带有相关子查询)转换为 LINQ
【发布时间】:2010-11-22 17:21:06
【问题描述】:

我正在寻找一些帮助,将以下 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) 函数应用于每个基金需要应用的单位表 - 因此相关子查询。

谢谢

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    为了回答这个问题,我将不得不假设您的实体的名称。

    从基金中选择 f.FundId、u.UnitValue f INNER JOIN FundUnit u ON f.FundId= u.FundId WHERE u.EffectiveDate = (SELECT MAX(生效日期) FROM FundUnit k 其中 u.FundId = k.FundId) AND f.Active = 1 由 f.FundId 订购

    我会假设一个 Fund 实体和一个 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
    

    我都是凭记忆做的,没有测试过,可能有一些小问题。有时间我去测试一下。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2023-03-30
      • 2018-12-09
      • 2014-07-12
      • 2013-05-25
      相关资源
      最近更新 更多