2015-04-16 77 views
-2

我有这样的MSSQL的查询,我要转换为LINQLINQ的加入where子句不工作

select * from personas 
left join PersonaDocumento on PersonaDocumento.PersonaId=personas.Id 
where personas.FirstName='23895389' or PersonaDocumento.Documento='23895389' 

这不起作用:

from p in db.personas 
join d in db.PersonaDocumento on p.Id equals d.PersonaId into dj1 
where p.FirstName=='23895389' || dj1.Documento=='23895389' 
from d in dj1.DefaultIfEmpty() 
select p 
+2

未来,请详细说明“不工作”一词。 –

回答

0

我想你了三次失误有:

from p in db.personas 
join d in db.PersonaDocumento on p.Id equals d.PersonaId into dj1 
where p.FirstName=='Jzuan' 
from d in dj1.DefaultIfEmpty() 
where d.Documento=='23895389' 
select d 

首先是join d on其中正确的语法是in。其次,您从p中选择,而不是从您加入的表格中选择d。 Plus dj1是一个元素列表,所以如果你需要过滤它中的元素,你应该在它之后做。具体表现在从ddj1条款

+0

我打错了,但where子句“dj1.Documento =='23895389'”根本不起作用。 –

+0

很难说,请将您的表的定义添加到您的问题 – codingadventures

+0

问题:这与数据库定义无关,我认为linq不支持where子句中的任何连接字段。 –

0

尝试这样的:

from p in db.personas 
join d in db.PersonaDocumento on p.Id equals d.PersonaId into dj1 
from ld in dj1.DefaultIfEmpty() 
where p.FirstName=='Jzuan' || (ld != null && ld.Documento=='23895389') 
select p 

注意我是如何重新排序条款。

+0

谢谢,现在它正在工作。 –