【问题标题】:How to convert following SQL Query into Lambda Expression?如何将以下 SQL 查询转换为 Lambda 表达式?
【发布时间】:2014-05-21 04:02:18
【问题描述】:

我有一个以下 SQL 查询,我已将其转换为 Linq,但不知道如何将此查询转换为 Lambda 表达式。

SQL

 SELECT BP.*
   FROM [ams].[BackgroundPackage] AS BP
        INNER JOIN [ams].[BkgPackageHierarchyMapping] AS BPHM
            ON BP.BPA_ID = BPHM.BPHM_BackgroundPackageID
        INNER JOIN [ams].[BkgOrderPackage] AS BOP
            ON BPHM.BPHM_ID = BOP.BOP_BkgPackageHierarchyMappingID
        INNER JOIN [ams].[BkgOrder] AS BO ON BOP.BOP_BkgOrderID = BO.BOR_ID
  WHERE BO.BOR_MasterOrderID = @OrderID
    AND BO.BOR_IsDeleted = 0

Lambda 版本 // 如何编写上述查询的 lambda 版本

Linq 版本

var packageData =
    (from ep in _dbContext.BackgroundPackages
     join e in _dbContext.BkgPackageHierarchyMappings on ep.BPA_ID equals e.BPHM_BackgroundPackageID
     join t in _dbContext.BkgOrderPackages on e.BPHM_ID equals t.BOP_BkgPackageHierarchyMappingID
     join s in _dbContext.BkgOrders on t.BOP_BkgOrderID equals s.BOR_ID
     where s.BOR_MasterOrderID == orderId
     select new
            {
                Id = ep.BPA_ID,
                Name = ep.BPA_Name,
            });

【问题讨论】:

  • 有什么问题?似乎很接近

标签: c# sql sql-server linq lambda


【解决方案1】:

您的 SQL 的 lambda 查询(简明表示法)将是:

var lambdaQuery = _dbContext.BackgroundPackages
    .Join(_dbContext.BkgPackageHierarchyMappings, ep => ep.BPA_ID, e => e.BPHM_BackgroundPackageID, (ep, e) => ep)
    .Join(_dbContext.BkgOrderPackages, ep => ep.BPHM_ID, t => t.BOP_BkgPackageHierarchyMappingID, (ep, t) => new { ep, t})
    .Join(_dbContext.BkgOrders, ept => ept.t.BOP_BkgOrderID, s => s.BOR_ID, (ept, s) => new { ept.ep, s })
    .Where(eps => eps.s.BOR_MasterOrderID  == orderId && eps.s.BOR_IsDeleted == 0)
    .Select(eps => eps.ep);

【讨论】:

  • @PreetSangha 对不起,如果答案冒犯了你,我只是想回答这个问题,因为 Neon-X 正在寻找 lambda 查询。 (简洁的表示法,与查询表示法相反)
  • 移除了 -1,因为它得到了改进。
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
相关资源
最近更新 更多