【问题标题】:Lambda expression in C# using Entity Framework with multiple left outer joins with in line additional filterC# 中的 Lambda 表达式使用具有多个左外连接的实体框架和内联附加过滤器
【发布时间】:2018-10-11 04:11:19
【问题描述】:

我们在我的项目中使用实体框架。在其中一项要求中,我需要使用左外连接和条件从多个表中查询数据。这是 SQL 脚本。有人可以为此提供 lambda 表达式吗?

SELECT  
    e.EmployeeId, e.EmployeeFirstName, e.EmployeeLastName,
    s.SkillId, s.SkillName,
    c.CertificateId, c.CertificateName, c.ExpiryDate
FROM    
    [dbo].[Employee] AS e
LEFT OUTER JOIN 
    [dbo].[EmployeeSkill] AS s ON e.EmployeeId = s.EmployeeId 
                               AND s.IsActiveSkill = 1
LEFT OUTER JOIN 
    [dbo].[EmployeeCertification] AS c ON e.EmployeeId = c.EmployeeId  
                                       AND c.IsActiveCertification = 1  
                                       AND c.ExpiryDate < GETUTCDATE() + 30
WHERE   
    e.DepartmentId = 1
    AND e.IsActiveEmployee = 1

【问题讨论】:

  • 看看你是否从这篇文章中自学:stackoverflow.com/questions/17142151/…
  • @John,在你提到的帖子中,虽然我们在 dc_tpatient_bookingm 上执行 LEFT OUTER JOIN,但它会转换为该表的内连接,因为我看到 m.enteredon 的 where 子句中有一个条件
  • 基本上我希望附加过滤器应该应用于左外连接中的相应表。因此,我只能从技能表中获取活动技能,并且只能从员工认证表中获取活动证书以及到期日期在接下来的 30 天内。

标签: c# sql lambda


【解决方案1】:

您可以使用 GroupJoin。它与 SQL 中的左外连接具有相同的功能。

【讨论】:

  • 当我执行 GroupJoin 并运行 SQL 配置文件时,我可以看到从数据库查询的所有列,而不是 Lambda 表达式中指定的列。如果我们按表查询,它只查询指定的列,并且通过组连接工作完美。但是对于这种方法,我们需要编写大量代码。我只寻找一个语句,比如我们的 SQL 查询,它应该只查询数据库中选定的列。
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多