2014-12-22 3 views
1

내가 어떤 .NET 4.5 코드가 결과? 나는 또한 if (result.Count() == 0) 시도하고 그 또한 foreach 루프에서 동일한 예외를 throw합니다. 나는 또한 foreach (var entry in result.ToList()) 시도하고 또한 동일한 예외를 throw합니다.는 LINQ 쿼리를 통해 열거

나는 행운이없는 제안 herehere을 시도해 보았습니다.

var result = db.storedProcedure(param) 
if (!result.Any()) { return; } 
var resultList = result.ToList(); 
foreach (var entry in resultList) {} 

을 그리고 난 아직도 그뿐만 아니라 foreach 루프에서 같은 예외를 얻을 :

나는 또한 시도했습니다.

Linq 결과 집합이 비어 있는지 쉽게 확인하는 방법이 있어야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

레코드가 없다면 실행하고 싶지 않은 'foreach' 다음에 코드가 있습니까? 그렇지 않다면'if (! result.Any()) {return; }'어쨌든 아무 것도하지 않습니다. –

+0

레코드의 수를 먼저 검사하지 않고 결과를 열거하려고 할 때도 마지막 예제에서 동일한 예외가 발생합니다. –

+0

@BenRobinson : 예, 맞습니다. 나는이 특정 질문에 관련이 있다고 생각하지 않기 때문에 여기에 그 코드를 포함시키지 않았다. – smoothgrips

답변

6

그냥 반복하기 전에 목록에 결과를 넣어 :

var result = db.storedProcedure(param).ToList(); 
if (result.Count == 0) { return; } 
+0

이 작품, 고마워요. 그러나, 나는 그것이 왜 Linq'.Any()'메소드가 존재한다면 왜 예외가 던져 지는지 궁금합니다. 그 방법의 현 시점은 무엇이며, 예외를 제기하지 않고 어떻게 적절하게 사용합니까? – smoothgrips

+0

@smoothgrips ToList를 수행 한 후에도 Any 메서드를 사용할 수 있습니다. 코드에 문제가있는 경우 Any는 foreach 전에 결과를 열거하므로 예외가 발생합니다. 일반적으로 그렇지 않습니다. 원하는만큼 쿼리를 열거 할 수 있습니다. 그러나 이것은 단지 특별한 경우입니다. –

+0

Sleman22 나는 '부드러운 그립 (smoothman)'을 향해 있어야한다고 말했고, 아마 – MethodMan

1

왜 심지어 모든 검사를 할 수 있습니까? result에 아무것도없는 경우 루프가 실행되지 않습니다. 그냥 가지고있어 :

var result = db.storedProcedure(param) 
foreach (var entry in result) 
{ 
    // Some code... 
} 

return; 
+0

많은 경우에 당신은 틀림없이 틀림 없습니다. 그러나 결과가 비어 있는지 여부에 따라 실행되는 루프 앞뒤에 코드가 있습니다. 특정 질문과 관련이 없으므로이 코드를 포함하지 않았습니다. – smoothgrips