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

标签 c# sql linq

我正在寻找一些帮助,将以下 sql 查询转换为 C# 中的 LINQ to entities。

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

查询读取数据库中的所有活跃基金及其最新单位值(value)。 Fund 表,其中包含每个基金的记录。 FundUnit 表包含每个基金每个日期的单位值(value)记录。以前日期的单位值也保留在表中以维护历史记录。

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

谢谢

最佳答案

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

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 实体和一个 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

这都是我凭内存做的,没有测试过,可能会有一些小问题。如果我有时间,我会测试它。

关于c# - 在 C# 中将 SQL 查询(带有相关子查询)转换为 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248193/

相关文章:

c# - <%@ 页面调试 ="True"...... %>

c# - 为什么我在插件区域看不到我的窗口?

c# - 业务逻辑的正确位置在哪里?

sql - 复杂 SQL 连接子查询与前 1 条记录

c# - 在 DynamicLinq 查询中使用扩展方法

c# - 作为 json 返回时排除某些字段

mysql - SQL 更新 MySQL 表中一列中 NText 的开头

c# - 通用 Linq OrderBy 函数的问题

c# - 显示每个请求的所有 linq sql 查询

c# - 使用 INNER JOIN 时出现意外的数据库输出