【问题标题】:Join sub query table to table function with outer apply using Entity Framework使用实体框架将子查询表连接到具有外部应用的表函数
【发布时间】:2016-01-19 17:59:06
【问题描述】:

我创建了一个 SQL Server 查询,该查询通过获取不同的案例 ID 列表并将它们连接到 fnGetRelatedCases 表函数来获得正确的结果。但是,我无法创建执行相同操作的实体框架查询。

SQL 服务器:

 select 
     cse.*
 from 
     (select distinct 
          CaseID
      from 
          ELFJuv.fnGetCalendar()
      where 
          Department = @Department 
          and HearingDateOnly = @FilterDate) as C
 outer apply 
     ELFJuv.fnGetRelatedCases(C.CaseID) as CSE
 where 
     CSE.CaseID is not null

下面的查询几乎可以工作,但它没有通过不同的案例 ID 列表加入。

实体框架:

IEnumerable<fnGetRelatedCases_Result> cases = 
(from calendar
 in _ctx.fnGetCalendar()
 where calendar.Department.Equals(department) &&
 calendar.HearingDateOnly == filterDate
 from fullCaseDetail in _ctx.fnGetRelatedCases(calendar.CaseID)
 select fullCaseDetail).ToList();

我需要将一个不同的案例 ID 列表传递给 fnGetRelatedCases 表函数,但我无法正确加入,因为所有案例 ID 都已加入。

【问题讨论】:

    标签: sql-server entity-framework linq outer-apply


    【解决方案1】:

    我想出了如何解决这个问题。

    (from calendar in _ctx.fnGetCalendar()
    .Where(d => d.HearingDateOnly == filterDate && d.Department == department)
    .Select(x => new { x.CaseID })
    .Distinct()
    from fullCaseDetail in _ctx.fnGetRelatedCases(calendar.CaseID)
    select fullCaseDetail).ToList();
    

    【讨论】:

      【解决方案2】:

      给你

      var cases = 
         (from caseID in (from calendar in _ctx.fnGetCalendar()
                     where calendar.Department.Equals(department)
                         && calendar.HearingDateOnly == filterDate
                     select calendar.CaseID).Distinct()
          from fullCaseDetail in _ctx.fnGetRelatedCases(caseID)
          select fullCaseDetail).ToList();
      

      相当于

      // Subquery
      var subquery =
          (from caseID in (from calendar in _ctx.fnGetCalendar()
           where calendar.Department.Equals(department)
               && calendar.HearingDateOnly == filterDate
               select calendar.CaseID).Distinct();
      // Query
      var query = 
          from caseID in subquery
          from fullCaseDetail in _ctx.fnGetRelatedCases(caseID)
          select fullCaseDetail;
      // Result
      var cases = query.ToList();
      

      【讨论】:

      • 谢谢!我更喜欢你的方法。
      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多