2014-12-27 1 views
0

나는이 내 LINQ 쿼리를 단순화 :결과가 null이 아닌 경우에만 linq 부속 조회의 결과에 대해 연산자를 실행하는 방법은 무엇입니까?

var q = (from x in ... 
select new 
{ 
CustomDate = (from t in .... 
       select new 
       {t.CreatedDate}).Max(cd=>cd.CreatedDate) 
}) 

문제는 서브 쿼리의 결과가 null의 경우 최대가 불면이다. 하위 쿼리가 비어있을 때 null 입력 가능 날짜를 지정하고 하위 쿼리의 데이터가있을 때 최대 날짜를 지정하는 방법 (A Nullable<T> 유형, 그런 일이로, 또는) TSource가 참조 형식 인 경우

+0

'새로운 {t.CreatedDate} 선택 '이 무슨 뜻인지 이해할 수 없습니다. 그것은 익명 형식을 만드는 것으로 보이지만 't.CreatedDate'가 할당되는 속성 이름이 없습니다. –

+0

전체 검색어를 게시 할 수 있습니까? –

+1

@Asad : 속성 이름을 지정하지 않으면 단순히 표현식의 속성 이름에서 가져옵니다. 나는. 'CreatedDate'는 익명 타입의 프로퍼티 이름이됩니다. –

답변

1

Enumerable.Max() 방법은 null를 반환합니다 (문자열을 CustomDate 만들기 및 날짜에 대한 문자열을 반환 너무 옵션입니다) 소스가 비어 있습니다. 당신이 널 후 원하는 형식으로 다시 캐스팅 물론 합체 된 수는 CustomDateNullable<DateTime> 없도록하려면 것을

let maxDate = (from t in ... 
       select new { t.CreatedDate }).Max(cd => (DateTime?)cd.CreatedDate) 
select new 
{ 
    CustomDate = maxDate ?? DateTime.MaxValue 
} 

참고 : 그래서 하나의 가능한 옵션은 다음과 같이 될 것이다.

관련 문제