LINQ中左外连接的等价物[重复]

Posted

技术标签:

【中文标题】LINQ中左外连接的等价物[重复]【英文标题】:Equivalent of Left outer join in LINQ [duplicate] 【发布时间】: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 查询的确切等价物是什么?

【问题讨论】:

【参考方案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 ;

【讨论】:

以上是关于LINQ中左外连接的等价物[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linq中的lambda /方法语法中的左外连接[重复]

Linq左外连接 多字段连接

LINQ:具有多个条件的左外连接

如何使用 Dynamic Linq 进行左外连接?

linq中的左外连接

在 Linq 中使用左外连接