【问题标题】:Equivalent of Left outer join in LINQ [duplicate]LINQ中左外连接的等价物[重复]
【发布时间】:2014-07-29 23:52:18
【问题描述】:

我有一个 T-SQL 查询

SELECT *
FROM BPM.tblEvaluationCatalogPlan
JOIN BPM.tblEvaluationCatalog ON BPM.tblEvaluationCatalogPlan.EvaluationCatalogId =
BPM.tblEvaluationCatalog.EvaluationCatalogId
JOIN BPM.tblMeasureProcess ON BPM.tblEvaluationCatalog.MeasureProcessId =
BPM.tblMeasureProcess.MeasureProcessId
JOIN dbo.tblMeasureCatalog ON BPM.tblMeasureProcess.MeasureCatalogId =
dbo.tblMeasureCatalog.MeasureCatalogId
LEFT OUTER JOIN dbo.tblMeasureUnit ON dbo.tblMeasureCatalog.MeasureUnitId =
dbo.tblMeasureUnit.MeasureUnitId

我已经为它写了一个 LINQ 查询

from m in tblEvaluationCatalogPlan
join l in tblEvaluationCatalog.Where(y => y.PlanId == PlanId) on
m.EvaluationCatalogId equals l.EvaluationCatalogId
join k in tblMeasureProcess.Where(x => x.ProcessId == ProcessId) on
l.MeasureProcessId equals k.MeasureProcessId
join j in tblMeasureCatalog on k.MeasureCatalogId equals
j.MeasureCatalogId
join i in tblMeasureUnit on j.MeasureUnitId equals i.MeasureUnitId
select new EvaluationCatalogPlanEntity
   {
   EvaluationCatalogPlan = m,
   EvaluationCatalog = l,
   MeasureProcess = k,
   MeasureCatalog = j,
   MeasureUnit = i
   }

但他们的输出不一样。

LINQ 中的 T-SQL 查询的确切等价物是什么?

【问题讨论】:

    标签: c# linq tsql


    【解决方案1】:

    您应该以代码格式放置代码,以便于阅读。

    我已经能够通过组加入来实现这个结果。看看这里: http://msdn.microsoft.com/en-us/library/bb397895(v=vs.120).aspx

    应该可以得到你想要的东西。

    【讨论】:

      【解决方案2】:

      试试http://msdn.microsoft.com/en-US/vstudio/ee908647.aspx#leftouterjoin

       var leftFinal =
          from l in lefts
          join r in rights on l equals r.Left into lrs
          from lr in lrs.DefaultIfEmpty()
          select new { LeftId = l.Id, RightId = ((l.Key==r.Key) ? r.Id : 0 };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2015-09-24
        • 1970-01-01
        • 2011-04-27
        • 2011-08-04
        • 2011-03-25
        相关资源
        最近更新 更多