2013-03-20 1 views
0

누구나 WriteLine에 대한 (내) 예상 출력이 표시되지 않는 이유를 설명 할 수 있습니까? VS에서 디버깅 할 때이를 볼 수 있으며 '결과'를 업데이트하여 VS 내 로컬 창에서 내용을 볼 수 있습니다. THXLINQ, Lambda, confuch

Func<Category, bool> del = (Category cat) => { 
    System.Console.WriteLine(cat.CategoryName); 
    return cat.CategoryID > 1; 
}; 


NorthwindEntities nw = new NorthwindEntities(); 

var result = nw.Categories.Where<Category>(del); 

Console.Read(); 
+1

안녕하세요, StackOverflow에 오신 것을 환영합니다. 예상되는 입출력을 게시하고 실제로 얻은 결과를 게시 할 수 있습니까? –

+1

출력을 어디에서 볼 수 있습니까? 이것은 콘솔 응용 프로그램입니까? –

답변

1

당신은 당신의 람다 exeucute하기 위해서는 results 뭔가를 할 필요가있다. 이것을 시도하십시오 :

var result = nw.Categories.Where<Category>(del); 
foreach(var r in result) 
{ 
} 

result을 열거하면 람다가 호출됩니다.

5

LINQ 구조는 lazy-evaluate입니다. 즉, 람다 함수는 항목이 열거에서 요청 될 때까지 호출되지 않습니다 (심지어는 한 번에 모두 필요하지는 않음).

var result = nw.Categories.Where<Category>(del).ToList(); 

여기에 의미를주의 : 당신이 이런 짓을하는 경우, 값이 두 번 콘솔 에 출력 될 것입니다 :

var result = nw.Categories.Where<Category>(del); 
var otherVariable = result.ToList(); 
foreach(var item in result) 
{ 
    // do something 
} 

이를이 값이 콘솔에 출력하게한다 LINQ 쿼리에 부작용이있는 코드를 사용하지 않아야하는 이유가 있습니다.

1

아마도 쿼리를 구체화해야합니다. resultIEnumerable이므로 result이 실제로 열거 된 경우에만 대리인이 파일을 보냅니다.

이 시도 :이 lazy evaluation 때문이다 var result = nw.Categories.Where<Category>(del).ToList();

0

. 이 기능은 실제로 아직 실행되지 않은, 그래서 당신은 스스로를 열거하거나 또는 같은 것을 할 때까지 열거되지 않습니다 평가를 호출이 호출

Category[] categories = nw.Categories.Where<Category>(del).ToArray(); 

합니다. 웹에서이 내용을 읽을 수 있지만 here은 일을 시작하는 기사입니다.