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

求助:将C# Lambda查询转换为简化版SQL Server存储过程

将C# Lambda查询转换为简洁的SQL Server存储过程

需求说明

从ResultData表中筛选符合以下条件的记录:

  • TrackingIdentifier等于指定编号,或关联的IntakeData表的Requestor_CaseID等于该编号
  • ResponseType为'RESPONSE'
  • Status为'OK'
  • Destination为指定值

按CreatedDate倒序取第一条,返回字段包括:ResultStatus、Destination及关联的IntakeData全量数据。

原C# Lambda代码

string[] Includes = new string[] { "IntakeData" };

var r = _repo.Filter<ResultData>
              (a => (a.TrackingIdentifier == trackingNum || 
                     a.IntakeData.Requestor_CaseID == trackingNum) 
                    && a.ResponseType == "RESPONSE"
                    && a.Status == "OK" 
                    && a.Destination == rs, Includes)
                  .OrderByDescending(d => d.CreatedDate)
                  .Select(c => new { c.ResultStatus, c.Destination, c.IntakeData })
             .FirstOrDefault();

简化后的SQL Server存储过程

EF自动生成的SQL包含大量冗余空值检查,以下是简化后的存储过程:

CREATE PROCEDURE GetLatestResultData
    @TrackingNum VARCHAR(255),
    @Destination VARCHAR(255)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT TOP 1
        rd.ResultStatus,
        rd.Destination,
        id.ID,
        id.TrackingIdentifier,
        id.ClientTrackingIdentifier,
        id.RequestorEmail,
        id.CandidateEmail,
        id.ConsumerIdentifier,
        id.LocationIdentifier,
        id.CandidateID,
        id.TotalCount,
        id.KitIdentifier,
        id.QueryStatus,
        id.QueryData,
        id.CreatedDate,
        id.CorporateEntityID,
        id.Requestor_CaseID,
        id.CandidateSMS,
        id.NotificationType,
        id.REDTAILOrderCreationStatus,
        id.REDTAILOrderCreationErrorMessage,
        id.APIInviteData,
        id.CRN
    FROM dbo.ResultData rd
    LEFT JOIN dbo.IntakeData id ON rd.IntakeDataID = id.ID
    WHERE 
        (rd.TrackingIdentifier = @TrackingNum OR id.Requestor_CaseID = @TrackingNum)
        AND rd.ResponseType = 'RESPONSE'
        AND rd.Status = 'OK'
        AND rd.Destination = @Destination
    ORDER BY rd.CreatedDate DESC;
END

简化说明

  1. 移除EF生成的多层嵌套查询,直接用LEFT JOIN关联两张表,逻辑更直观
  2. 删除冗余空值检查:若业务中参数和对应字段不会为NULL,直接使用等值判断即可;如需兼容NULL场景,可补充(字段 IS NULL AND 参数 IS NULL)的分支,但多数业务场景下无需该冗余逻辑
  3. 精简返回字段,仅保留需求明确的内容,避免不必要的投影
  4. 调整参数类型长度(将自动生成的VARCHAR(8000)改为更合理的VARCHAR(255),可根据实际业务调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:43:19