【发布时间】:2011-03-25 05:09:40
【问题描述】:
如何在 C# LINQ 中对对象执行左外连接而不使用 join-on-equals-into 子句?有没有办法用where 子句做到这一点?
正确问题:
对于内部连接很容易,我有这样的解决方案
List<JoinPair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key
select new JoinPair { LeftId = l.Id, RightId = r.Id})
但是对于左外连接,我需要一个解决方案。我的是这样的,但它不工作
List< JoinPair> leftFinal = (from l in lefts from r in rights
select new JoinPair {
LeftId = l.Id,
RightId = ((l.Key==r.Key) ? r.Id : 0
})
JoinPair 是一个类:
public class JoinPair { long leftId; long rightId; }
【问题讨论】:
-
你能举个例子说明你想要达到的目标吗?
-
正常的左外连接是这样的: var a = from b in bb join c in cc on b.bbbbb equals c.ccccc into dd from d in dd.DefaultIfEmpty() select b.sss ;我的问题是没有任何方法可以使用 join-on-equals-into 子句来做到这一点,例如 var a = from b in bb from c in cc where b.bbb == c.cccc ... 等等.. .
-
当然有,但你应该发布一个你已经拥有的代码示例,以便人们可以给你一个更好的答案
-
我在寻找"Left excluding" JOIN(我将它与“OUTER”的概念混淆了)。 This answer was closer to what I wanted.