【问题标题】:How can I convert this code from SQL to Linq如何将此代码从 SQL 转换为 Linq
【发布时间】:2011-10-21 08:03:05
【问题描述】:

如何将下面的代码从 SQL 转换为 Linq

SELECT CF.CustomerProfileId,CF.Salutation,CF.Gender,CF.LastName,
           CF.DateOfBirth,AD.Line1,AD.Line2,AD.Line3,AD.Line4,AD.Line5,
           AD.Country,AD.ElectronicAddressDesc,NCIType.NationalCustomerIdentifierTypeDesc,
           NCI.NationalCustomerIdentifier from CustomerProfile CF
           left join Address AD on CF.CustomerProfileId = CF.CustomerProfileId
           left join NationalCustomerIdentifiers NCI on CF.CustomerProfileId = NCI.CustomerProfileId
           left join NationalCustomerIdentifierType NCIType on NCI.NationalCustomerIdentifierTypeId = NCIType.NationalCustomerIdentifierTypeId
          where CF.CustomerProfileId = @CustomerProfileid  and CF.Version = @Version

【问题讨论】:

  • 如果它在我所在的位置,我会从该查询创建一个视图,然后在您的代码中导入该视图。
  • 提示。尝试将其分解为多个逻辑 LINQ 查询,然后使用延迟执行将它们连接起来,就像将 C#/VB 代码重构为可管理的块一样。提示 2:对左连接使用 DefaultIfEmpty 或参见提示 3。提示 3:使用对象之间的自然关联来完全避免连接。
  • 似乎 DefaultIfEmpty 不适用于 Linq to entity。在花了很多时间寻找左外连接之后,我最终决定使用 VIEW。

标签: sql linq linq-to-sql linq-to-entities


【解决方案1】:

您需要在 LINQ 中进行多个左连接。这是可能的,虽然看起来不太好(linq 在处理除内部以外的连接时不是很舒服)。 Here is a microsoft example of left join in linq 它只连接两个表,但您可以扩展它。如果您不喜欢结果的外观 - 比创建视图或存储过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多