2013-06-05 10 views
0

왼쪽 된 조인에서 때때로 context에 대한 null 값을 반환하기 때문에 비 정적 메서드 예외를 반환하는 LINQ 쿼리가 있습니다. .Linq : non-static-methods-a-target select new {model}

return (from t in context.Alphas 
       join b in context.Betas on new { Id = t.Id } equals new { Id = b.AlphaId } into b_leftjoin 
       from b in b_leftjoin.DefaultIfEmpty() 
       where 
        t.UserProfileId == userProfileId 
        && t.IsClosed == false 
        && t.IsCancel == false 
        && t.EndDate <= DateTime.Now 
       orderby 
        t.Title 
       select new AlphaSelection() 
       { 
        Title = t.Title, 
        CurrentUser = b.UserProfile == null ? null : b.UserProfile, 
        BetaId = b.Id == null ? 0 : b.Id, 
        ProjectNumber = t.ProjectNumber, 
        AlphaId = t.Id 
       }).ToList(); 

CurrentUser 및 BetaId를 제거하면 쿼리가 작동하지만 모든 정보를 함께 유지해야합니다. 그 문제를 해결해 주시겠습니까?

감사합니다. (코멘트에 응답)


편집 :

실제 예외가 이것이다

비 정적 방법은 타겟을 필요로한다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

Exception Details: System.Reflection.TargetException: Non-static method requires a target. 

Source Error: 


Line 39:    else 
Line 40:    { 
Line 41:     return query.ToList(); 
Line 42:    } 
Line 43:   } 
+1

** 실제 ** 예외 란 무엇입니까? –

+0

예외에 대한 정확한 세부 정보를 제공 할 수 있습니까? 지금은 불분명하다. –

+0

'Id '의 종류는 무엇입니까? 그리고 왜 당신은'new {}'를 사용하여 당신의 참여를하고 있습니까? – Guvante

답변

4

널 참조 예외가 발생합니다. LINQ는 백엔드에서 리플렉션을 사용하여 비 정적 대상 예외라고합니다.

CurrentUser = b.UserProfile == null ? null : b.UserProfile, 
BetaId = b.Id == null ? 0 : b.Id, 

을 일으키는 원인이되어, 당신은 참조 형식의 기본 값이 null이기 때문에

CurrentUser = b == null ? null : b.UserProfile, 
BetaId = b == null ? 0 : b.Id, 

할 필요가있다.

+0

또는'whatever == null 대신'??'을 사용할 수 있습니까? defaultval : whatever' –

+0

정말 좋은 !! 대단히 감사합니다 !! = D – Karine

+0

@newStackExchangeInstance :이 경우가 아니라 원래의 형식이지만 올바른 버전은 아니며 조건은'b'를 검사하고 최종 결과는'b' 부분을 사용합니다. – Guvante