2010-06-08 7 views
3

나는 그래서 기본적으로 무슨 일이 일어나고 있는지 변수 "LINQ는" "매개 변수"의 값에 따라 다른 것입니다 몇 가지 코드 내가LINQ 쿼리와 컨텍스트

if(parameter == 1) 
{ 
var linq = from a in db.table select a; 
} 
else 
{ 
var linq = from a in db.table where a.id = 1 select a; 
} 

foreach(var b in linq) 
{ 
... 
} 

을 쓰고 있어요에 약간의 문제가 있습니다. 내 foreach 루프 "linq"통해 루프 할 때 linq 현재 컨텍스트에서 존재하지 않는 방법에 대한 오류가 발생합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

9

변수 linq이 (가) 사용하려고하면 이미 범위를 벗어 났으므로 시도한 것은 작동하지 않습니다. 선언을 바깥 범위로 옮겨야합니다.

일반적인 방법으로 질문에 대답하십시오 : 할당하기 전에 변수를 선언해야하는 경우 var을 사용할 수 없습니다. 당신이 일을 간단하게 할 수 있지만 특정 예에서

IQueryable<Something> linq; 
if(parameter == 1) 
{ 
    linq = from a in db.table select a; 
} 
else 
{ 
    linq = from a in db.table where a.id == 1 select a; 
} 

: 당신은 명시 적으로 타입을 선언 할 필요가

var query = from a in db.table select a; 
if (parameter != 1) 
{ 
    query = query.Where(a => a.id == 1); 
} 
+2

+1 OP의 샘플을 기반으로 'if (parameter! = 1)'(두 번째 코드 샘플의 경우) –

+0

아 맞아요. linq 결과를 쿼리 할 수 ​​있습니다. 이것은 근본적으로 중요한 기능입니다. linq 내가 감사하기 시작했습니다). 이것은 매우 도움이됩니다, 감사합니다! – sooprise

+0

@Ahmad Magged : +1 감사합니다. 잘 목격되었다! –

0

내가 같은 테이블을 반환하고 가정이 가장 좋은 방법인지 몰라하지만, .

var linq = from a in db.table where a.id = 1 select a; 

if(parameter == 1) 
{ 
linq = from a in db.table select a; 
} 

//foreach. 

linq 쿼리를 재구성하여 실제로 벌금을 부과하지 않았으므로 큰 벌금을 내지 않아도됩니다.

관련 문제