2011-01-11 4 views
0

반환 할 결과가없는 경우를 제외하고 다음 LINQ 쿼리는 올바르게 작동합니다. 그런 다음 InvalidOperationException이 발생합니다.LINQ 쿼리에서 반환 된 결과를 어떻게 처리합니까?

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 결과의 존재 여부를 테스트하고 아무 것도없는 경우 어떻게 움직일 수 있습니까? 나는 try-catch에 대해 생각했지만 더 우아한 해결책이 있어야한다고 느꼈다.

이 예에서는 첫 번째 결과의 ID 만 예상합니다. 전체 개체를 반환하려는 다른 경우가있을 수 있습니다.

var drId = dcDest.drs.Where(dr => dr.ContactID == contactId) 
         .Select(dr => dr.Id).First(); 

int xId = drId; 

답변

3

SingleOrDefault()을 사용해야합니다.

FirstOrDefault()도 작동 할 수 있지만 정말로 'SingleOrDefault()'가 더 적절한 선택이되도록 컬렉션에 하나만 있어야한다고 말하고 있습니다 (둘 이상이있는 경우 예외가 발생합니다).

반면에 시퀀스가 ​​필요하지만 반환되는 요소가 없을 때 대/소문자를 처리해야하는 경우 DefaultIfEmpty()을 사용하면 시퀀스가 ​​비어있을 때 기본값을 반환 할 수 있습니다. http://msdn.microsoft.com/en-us/library/bb355419.aspx

비어있을 때 어떤 행동을 원하십니까? 이드의 제로 또는 다른 것?

+0

반환 값이 비어 있으면 혈청이 우수합니다. – DenaliHardtail

관련 문제