2011-05-16 6 views
0
var query = from t1 in Table1 
      join t2 in Table2 
       on new { t1.Id } 
       equals new { t2.Id} 
      select new 
      { 
       t1.Id, 
       t1.FirstName, 
       t1.MiddleName,//allows null values in the database 
       t1.LastName, 
       t1.phone //allows null values in the database 

      }; 
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL" 
{ 
} 

내 LINQ 쿼리에서 middleName 및 Phone에 대한 null 값을 비롯한 모든 행을 가져올 수있는 방법이 있습니까?NULL 값에 대한 LINQ 쿼리가 실패합니다.

+0

"MiddleName"및 "phone"의 데이터 유형은 무엇입니까? – used2could

+0

'Table1'과'Table2'는'DataTable' 맞습니다, 당신은 Linq to SQL을 사용하지 않고 있습니까? – R0MANARMY

+0

왜 T2에 가입 하시겠습니까? 당신은 그것을 사용하지 않습니다, 당신은 이미 세트를 필터링 했습니까? – Nix

답변

0

메타 데이터가 DB 스키마와 동기화되지 않은 것처럼 들립니다. 마치 스키마 MiddleName에 대해 생성 된 클래스가 nullable이 아니었지만 지금은 그렇습니다. 그렇다면 Entity Framework를 사용하거나 LINQ to SQL을 사용하는 경우 클래스를 새로 고치는 경우 EDMX를 새로 고쳐야합니다.

+0

그게 문제라고 생각하지 않습니다. – Talk2me

+0

알았어, 자네를 돕기에 충분한 정보를 제공하지 않아서 네가 겪고있는 문제를 근거로 내 추측이야. LINQ는 일반적인 기술이므로 사용중인 공급자 (Entity Framework? LINQ2SQL? 순수 개체)에 대한 자세한 정보를 제공하고 예외의 전체 스택 추적을 게시하면 더 많은 도움이됩니다. –

+0

Linq-SQL – Talk2me

1

linq-to-datasets를 사용하는 경우 DataRow의 값이 DBNull.Value이므로 nullable 열을 null로 수동 변환해야합니다. 이 탄 문제가

var query = from t1 in Table1 
      join t2 in Table2 
       on new { t1.Id } 
       equals new { t2.Id} 
      select new 
      { 
       Id = t1.Id, 
       FirstName = t1.FirstName, 
       MiddleName = t1.MiddleName,//allows null values in the database 
       LastName = t1.LastName, 
       Phone = t1.phone //allows null values in the database 

      }; 
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL" 
{ 
} 
+0

이것은 내가 얻는 것입니다 ....... 오류 \t 11 : 유효하지 않은 익명 형식 멤버 선언자. 익명 형식 멤버는 멤버 할당, 단순한 이름 또는 멤버 액세스로 선언해야합니다. – Talk2me

+0

예, 익명 형식의 문제입니다. 'null'에서 유추 할 수 없습니다. –

+0

익명 형식을 사용하려면 조건부 코드를 사용자 지정 속성으로 래핑해야합니다. 강력하게 형식화 된 DataRow에 부분 클래스를 추가하고 MiddleNameNullable 및 PhoneNullable과 같은 속성을 표시합니다. –

0

같은 호출이 지정되지 않은 데이터 세트에서

var query = from t1 in Table1 
     join t2 in Table2 
      on new { t1.Id } 
      equals new { t2.Id} 
     select new 
     { 
      t1.Id, 
      t1.FirstName, 
      t1.IsMiddleNameNull ? null : t1.MiddleName, 
      t1.LastName, 
      t1.IsPhoneNull ? null : t1.Phone 
     }; 

: 강력한 데이터 집합을 입력 당신은 같은 것을 할 수 있어야 새로운 익명 객체는 값에서 유추 된 유형으로 즉석에서 정의 된 속성을가집니다. 가운데 이름이라는 새 속성 유형이 생성됩니다 이러한 라인

MiddleName = t1.MiddleName,//allows null values in the database 

에서

는 t1.MiddleName의 유형입니다. 그러나 t1.MiddleName이 null 인 경우 유형은 무엇입니까 ??? Null에는 유형이 없습니다.

는 ambiguousity 단순히 제공되지 않는 경우에도, 컴파일러는 어쨌든 문자열 있다고 알려

MiddleName = (string)t1.MiddleName, 

을 넣어 방지합니다.

+0

그 중 하나가 작동하지 않습니다. – Talk2me

0

에게 전해 주 시겠어요 당신이 t1.IsNull("MiddleName") ? null : t1["MiddleName"]

관련 문제