You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework开发的HRMS 401k报表如何新增D03B数据查询

解决方案

方案1:直接执行原生SQL(推荐,适配你熟悉SQL的技术背景)

你不需要完全掌握EF的查询语法,EF支持直接运行你熟悉的SQL语句,只需替换原有查询逻辑即可:

hrmsEntity hrms = new hrmsEntity(dbConnection);
// 直接执行你写的SQL,查询结果会自动映射到TRP_ConDetail对象
var detail = hrms.TRP_ConDetail.SqlQuery(@"
SELECT * 
FROM [SageHRMS_900].[dbo].[UPCHKD] 
WHERE [EARNDED] IN ('D03', 'D03B')
").ToList();

// 后续循环逻辑不用大幅调整,注意这里遍历的是上方查询得到的detail变量,不要重复查hrms.TRP_ConDetail
foreach (var line in detail)
{
    fileData += line.Plan + line.RecordID + line.Date + line.SSN + line.Fund + line.LoanNum +
    line.Amount + line.Salary + line.SalaryType + line.ContType + line.StateTax + 
    line.LoanPayType + line.Filler01 + Environment.NewLine;
}

注意:如果UPCHKD表的字段和TRP_ConDetail类的属性数量、名称不匹配,把SQL里的*替换为和TRP_ConDetail属性一一对应的字段别名即可。


方案2:使用EF原生Linq查询

如果TRP_ConDetail类中有对应数据库EARNDED字段的属性(大概率是ContType或者Desc字段,你可以找一条已知的D03类型数据,比对属性值确认即可),可以直接用Linq做过滤:

hrmsEntity hrms = new hrmsEntity(dbConnection);
// 把代码中的「对应EARNDED的属性名」替换为你确认的实际属性名即可
var detail = hrms.TRP_ConDetail.Where(x => new[]{"D03","D03B"}.Contains(x.对应EARNDED的属性名)).ToList();

foreach (var line in detail)
{
    fileData += line.Plan + line.RecordID + line.Date + line.SSN + line.Fund + line.LoanNum +
    line.Amount + line.Salary + line.SalaryType + line.ContType + line.StateTax + 
    line.LoanPayType + line.Filler01 + Environment.NewLine;
}

原有过滤逻辑排查说明

你没有在现有代码中找到D03的过滤规则,大概率是以下两种情况:

  1. TRP_ConDetail对应的不是数据库物理表,是提前创建的数据库视图,视图中已经写死了WHERE EARNDED = 'D03'的过滤条件,直接修改视图的过滤规则为IN ('D03','D03B')即可,不需要修改任何C#代码
  2. EF配置了全局查询过滤器,你可以搜索项目中HasQueryFilter相关的代码,找到后把D03B加入过滤条件即可

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:57:02