在LINQ中用“和”左外连接?

时间:2013-04-23 07:52:59

标签: linq

如何在Linq中编写以下内容?

select * from CompetitionDealer d

left outer join CompetitionResult r 
on d.ID = r.fk_CompetitionDealer and     (r.fk_CompetitionParameter is null 
or r.fk_CompetitionParameter = ID1)

where fk_Competition = ID2

问题是连接上有“AND”。 如果我将它移动到结果完全不同的地方,那么我就不能那样做了。

2 个答案:

答案 0 :(得分:1)

也许是这样的:

var ls= (
        from d in db.CompetitionDealer
        from r in db.CompetitionResult
            .Where(a => a.fk_CompetitionDealer == d.ID 
                       && (a.fk_CompetitionParameter == null 
                       || a.fk_CompetitionParameter == ID1)).DefaultIfEmpty()
        where d.fk_Competition == ID2
        select d
    );

其中db是linq数据上下文

答案 1 :(得分:0)

我把它分成两个问题来解决它:

首先,我选择了以下列表:

从CompetitionResult r中选择* 其中r.fk_CompetitionParameter = ID1)

并且我在上面的列表中加入了联盟。