2017-10-27 2 views
1

가능한 맥스, SelectMany, 'System.InvalidOperationException'형식의 처리되지 않은 예외 System.Core.dll아무런 응답이 I는 다음과 같은 오류가 나타날

발생 가

추가 정보 : 서열 요소가없는

on

MainFields.ForEach(Field => Field.Size = Math.Max(FilesObject.SelectMany(x => x.Fields).Where(y => y.Name == Field.Name).Select(m => m.Size).Max(), Field.Size)); 

내 MainFields 개체는 FilesObject의 모든 필드를 기반으로 업데이트해야합니다. 문제의 근본 원인은 때때로 필요한 MainFields 이름이 FilesObject에 존재하지 않는 경우입니다.

나는 이것을 루프로 분해하고 몇 가지 논리 검사를 추가 할 수 있지만, Linq에서이를 피할 수있는 방법이 있기를 희망했다.

+4

비어있는 경우 기본값 사용'.defaultIfEmpty (0) .Max()' –

+0

바로 그거야! 고맙습니다. – KnightsOfTheRoun

답변

3

있는 방법이있다는 - Max()를 호출하기 전에 DefaultIfEmpty()을 넣어 : 컬렉션에 요소가없는 경우는 하나이기 때문에

Math.Max(FilesObject.SelectMany(x => x.Fields) 
    .Where(y => y.Name == Field.Name).Select(m => m.Size).DefaultIfEmpty(0).Max() 

DefaultIfEmpty은 (그럼 Max()이 요소를 반환합니다, 하나 개의 기본 요소로 열거 돌아갑니다) 빈 컬렉션 (물론 적절한 기본값을 사용, 예를 들어 0을 사용).

+0

그게 다야! 고맙습니다. – KnightsOfTheRoun

관련 문제