2016-08-30 2 views
0

이하 두 개의 쿼리가 있습니다. 나는 Sql Query와 linq 질의를 가지고있다. 논리적으로 SQL 쿼리에 해당하는 linq 쿼리를 가져올 수 없습니다. 현재 문제는 다음과 같은 내용의 줄에 있습니다 //right here.변환 Where 절이있는 왼쪽 외부 조인과 Linq-to-SQL

The name 'u' does not exist in the current context

누군가가 이유를 말해 나를하시기 바랍니다 컴파일 쿼리를 해결하는 데 도움을 줄 수 있습니다 :

나는 u.isDeleted에 액세스하려고 컴파일 오류를 얻고있다. 이것이 최선의 방법이 아니라면, 나는 제안에 개방되어있다. 대단히 감사합니다 !!!! (작동하지 않습니다)

Linq에 내가 LINQ

SELECT m.* 
FROM Foo AS m 
INNER JOIN Bar AS u ON m.Id = u.m_Id 
LEFT JOIN Temp AS vm on u.M_Id = temp.m_Id 
WHERE vm.id IS NULL AND u.Id = 32 
+0

우리가 읽을 수 있도록 코드를 대문자로 만들지 마십시오. 코드를 쉽게 읽을 수 없다.) 실제 코드를 보여주십시오. –

+0

가독성을 위해 컴파일되지 않는 코드로 코드를 수정하지 마십시오. 우리는 * 컴파일 *하는 것을 읽는 것에 익숙하며 다른 형식으로 보는 것은 상쇄 일뿐입니다. (모든 대문자 코드는 눈에 거슬림입니다.) – Siyual

+0

SQL이 유효하지 않으므로 여기에 문제가 무엇인지 알기가 어렵습니다. –

답변

4

로 변환하고자하는

var ret = (from m IN db.Foo 
      join u in db.Bar on m.Id equals u.m_Id 
      into FooBars 
      from vm IN db.Temp.DefaultIfEmpty() 
      where vm == null && u.Id = 32 // right here 
      select m).ToList(); 

SQL 쿼리, 나는 당신이 left join 구문 잘못된 거 같아요. 이 방법은 다음과 같습니다

var ret = (from m IN db.Foo 
      join u in db.Bar on m.Id equals u.m_Id 
      join vm in db.Temp on u.M_Id = temp.m_Id into vmg 
      from vm im vmg.DefaultIfEmpty() 
      where vm == null && u.IsDeleted 
      select m).ToLIST(); 
  • into X 구문은 GroupJoin 방법입니다 - 그래서 당신은 db.Bar에 가입 할 때 잘못 사용 -이 당신이 정상에 가입 할
  • 당신이 먼저 GroupJoin을 사용하여 조인 왼쪽을 수행 그런 다음 그룹에서 선택하여 DefaultIfEmpty을 추가합니다. 왼쪽의

참조 문서 가입 -이 같은 위의 쿼리 구문도 메서드 구문에 모두 표시 (및 사용 GroupJoin)

하여 컴파일 오류에 관해서는

:

The name 'u' does not exist in the current context

귀하의 질문 :

var ret = (from m IN db.Foo 
    join u in db.Bar on m.Id equals u.m_Id 
    into FooBars 
    from vm IN db.Temp.DefaultIfEmpty() 
    where vm == null && u.Id = 32 // right here 
    select m).ToList(); 

R 즉, 조인 결과를 모두 FooBars으로 그룹화 한 것입니다. 따라서 해당 라인 뒤에는 쿼리에 u과 같은 것이 없습니다.

+0

고맙습니다. 그것은 매력처럼 작동했습니다! – gh9

+0

@ gh9 - 환영합니다 :) 추가 한 SO 문서를 확인하고 다른 구문을 확인하십시오. 그것이 도움이된다면 당신은 또한 거기 upvote 수 있습니다 :) –

관련 문제