2013-04-23 103 views
0

如何在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”。 如果我将它移动到结果完全不同的位置,那么我不能这么做。

+0

看看这个:http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx – Devesh 2013-04-23 07:54:28

回答

0

我解决它通过将其分为两个问题:

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

select * from CompetitionResult r 其中r.fk_CompetitionParameter = ID1)

并且比我越过上面的名单加入。

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数据上下文

+0

谢谢你的回答,但是这个语法是无效的。 :-( r在Where无效。 – Keren 2013-04-23 08:33:09

+0

@Keren:我更新了答案。再试一次 – Arion 2013-04-23 10:44:35

+0

对不起。对不起。语法无效。 – Keren 2013-04-23 11:23:42