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中左外连接的等价物[重复]的主要内容,如果未能解决你的问题,请参考以下文章