2016-10-18 1 views
0

Nullable Int (i_Customer) ID로 변환하려고합니다. Null 값을 수락하고 다른 ID가 지원하지 않으므로이 Uint (i_Customer)를 변환하려고합니다. 상위 테이블은 Customer (i_Customer)이고 Child는 Fault (i_customer)입니다. 둘 다, 나는 결과를 얻기 위해 EF Query에 참여하고있다. 그러나 매우 불안한 ​​nullreferenceexception was unhandled by user code 예외가 있습니다. 어떻게 해결할 수 있습니까? 여기 Ho가 EF 쿼리에서 Nintable Int로 Uint를 변환하는 경우

는 EF 쿼리입니다 :

if (servicelevel == 3) 
      { 
       result = (from s in res 
          join cInfo in custInfo on 
          s.fault.i_customer equals Convert.ToInt32((int?)cInfo.customers.i_Customer) 
          where (s.fault.resolved == null) || (s.tasks.assignedto == agent) 
          orderby s.fault.ispriority descending, s.fault.logtime ascending 
          select new ActiveFaultResult() 
          { Company_Name = cInfo.customers.Company_Name, 
            //replies = replies, 
            idFaults = s.fault.idFaults, 
            hashvalue = s.fault.hashvalue, 
            responsible = s.fault.responsible, 
            logtime = s.fault.logtime, 
            isinternal = s.fault.isinternal, 
            ispriority = s.fault.ispriority 

          }).ToList<ActiveFaultResult>(); 

       // var limitresult = result.Take(50); 
       return result; 
      } 
+0

을 다할 것입니다 : 아래의 예를 참조? ? – mybirthname

+0

@mybirthname, 이것을 정의하고 EF Query에서 사용할 수 있습니까? 그렇다면, 어떻게? 도와주세요. –

+0

Convert.ToInt32 (int?) cInfo.customers.i_Customer) => (int?) cInfo.customers.i_Customer –

답변

0

정상 캐스트가

s.fault.i_customer equals (int?)cInfo.customers.i_Customer 

을 또는 INT와 같은 i_Customer을 정의하지 왜

s.fault.i_customer ?? 0 equals cInfo.customers.i_Customer 
+1

그건 굉장 했어. 이제 막 알아 냈어. Convert.ToUInt32 (f.i_customer ?? 0)의 custInfo에있는 cust를 결합하면 코드에 의해 custo.DefaultIfEmpty()의 custlis에서 custo 으로 cust.i_customer가됩니다. 다시 한 번 감사드립니다 –

+0

@MichealP. 기꺼이 도움이 – Sherlock

+0

고마워, 난 그냥 잘못된 ID를 변환했다. 정말 고마워요 선생님! –

0

당신은 외부가 null 값을 처리 할 수 ​​있도록 가입 제공 DefaultIfEmpty()를 사용합니다.

result = (from s in res 
     join cInfo in custInfo on s.fault.i_customer equals (int)cInfo.customers.i_Customer into A 
     from cInfo in A.DefaultIfEmpty() 
     where (s.fault.resolved == null) || (s.tasks.assignedto == agent) 
     orderby s.fault.ispriority descending, s.fault.logtime ascending 
     select new ActiveFaultResult() 
     { 
       Company_Name = cInfo == null? String.Empty: cInfo.customers.Company_Name, 
       idFaults = s.fault.idFaults, 
       hashvalue = s.fault.hashvalue, 
       responsible = s.fault.responsible, 
       logtime = s.fault.logtime, 
       isinternal = s.fault.isinternal, 
       ispriority = s.fault.ispriority 
     }).ToList<ActiveFaultResult>(); 
return result; 
+0

고맙습니다.하지만 여전히 동일한 예외가 발생합니다. 다시 캐스팅되었습니다. 'custInfo의 cInfo에 s에 가입하십시오. fault.i_customer는 A.DefaultIfEmpty()의 cInfo에서의 cInfo.customers.i_Customer와 같음입니다. 어떻게 생각하십니까? 기억, 나는 (int?)와 같은 Nullable Int로 uint32를 변환하려고합니다. –

+0

'(int.) cInfo.customers.i_Customer' 여기에는 Nullable 캐스트 예외의 원인이 있습니다. 그 이상을 전달하는 데 오류가있을 수 있습니까? –

+0

cInfo.customers가 null인지 여부를 확인할 수 있습니까? 또한 (int)에서 캐스팅을 제거 할 수도 있습니다. cInfo.customers.i_Customer –

관련 문제