2011-01-24 4 views
5

오류 : Null 값을 사용할 수없는 값 형식 인 System.Int32 형식의 멤버에 null 값을 할당 할 수 없습니다. 프로그램이 여기에서 충돌합니다 :LINQ : System.Int32가 nullable 값 형식이 아닙니다

Nullable<Int32> maxTagFrequency = (from t in tagSummary select t.tagCount).Max(); 

null이 허용되는 변수를 선언했기 때문에 이상한가요? maxTagFrequency은 ... 하나

전체 LINQ 쿼리를 작동하지 않습니다

private void BindTagCloud() 
{ 

int pro_id = Convert.ToInt32(proj_id); 

    var tagSummary = from af in db.AgileFactors 
       join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID 
       join s in db.Stories on psf.StoryID equals s.StoryID 
       join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID 
       join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID 
       join pro in db.Projects on it.ProjectID equals pro.ProjectID 
       where pro.ProjectID == pro_id && 
        pro.ProjectID == it.ProjectID && 
        it.ProjectIterationID == pim.ProjectIterationID && 
        pim.ProjectIterationMemberID == s.ProjectIterationMemberID && 
        s.StoryID == psf.StoryID && 
        psf.AgileFactorID == af.AgileFactorID 
        group af by af.Name into tagGroup 

        select new 
        { 

         Tag = tagGroup.Key, 
         tagCount = tagGroup.Count() 

        }; 

    Nullable<Int32> maxTagFrequency = (from t in tagSummary select t.tagCount).Max(); 

var tagCloud = from af in db.AgileFactors 
        join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID 
        join s in db.Stories on psf.StoryID equals s.StoryID 
        join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID 
        join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID 
        join pro in db.Projects on it.ProjectID equals pro.ProjectID 
        where pro.ProjectID == pro_id && 
         pro.ProjectID == it.ProjectID && 
         it.ProjectIterationID == pim.ProjectIterationID && 
         pim.ProjectIterationMemberID == s.ProjectIterationMemberID && 
         s.StoryID == psf.StoryID && 
         psf.AgileFactorID == af.AgileFactorID 
        group af by af.Name into tagGroup 
        select new 
        { 

         Tag = tagGroup.Key, 
         weight = (double)tagGroup.Count()/maxTagFrequency * 100 
        }; 

    ListView1.DataSource = tagCloud; 
    ListView1.DataBind(); 

} 
+0

가능한 중복 [nullable sum 문제가있는 Linq 쿼리] (http://stackoverflow.com/questions/696431/linq-query-with-nullable-sum-problem) – RichardTheKiwi

+0

여전히 문제를 해결할 수없는 것 같습니다. . – MiziaQ

답변

10

을이 시도 : 당신은 LINQ 쿼리 내부의 캐스트를 넣을 때

int? maxTagFrequency = (from t in tagSummary select (int?)t.tagCount).Max(); 

그것이로 전체 결과를 수 필요한 경우는 null

나는 "LINQ의 빈 순서에 최대"다음 링크에 대한 검색 관련 한 : Max or Default? 해당 페이지에 특히

이 문서에 대한 링크입니다 -이 왜이 작품에 대한 자세한 설명을 제공합니다 : http://www.interact-sw.co.uk/iangblog/2007/09/10/linq-aggregates

0

이는 디자이너를 통해 DBML에 생성 된 유효하지 않은 연결 또는 다른 이유로 인해 발생할 수 있습니다. 내 경우에는 실제로 일대일 테이블을 만들려고 할 때 잘못된 테이블을 부모로 만든 실수를 포착했습니다. 그래서 무슨 일이 있었는지 내 Linq DBML 클래스는 DBML에 정의 된대로 "상위"레코드를 기대합니다. 이 "부모"테이블은 실제로 부모가 아니기 때문에 두 테이블을 연결하는 id 열에 연결된 해당 레코드가없는 경우가 많습니다. 그래서 이런 일이 발생했을 때, 내 결과 세트의 세 번째 행을 생성/채우는 동안 내 Linq 클래스의 인구가 잘못 될 수 있습니다.

1

이 오류는 X.* SQL 기능을 사용하는 저장 프로 시저에서 가져올 때 LINQ to SQL에서 발생할 수 있습니다.

SELECT 절의 모든 필드를 명시 적으로 언급하면이 문제를 해결할 수 있습니다. 정의 된 외래 키 관계가있을 때 이것은 특히

SELECT X.Field1, X.Field2 from X 

이,이 오류가 가끔 발생하는 것 같습니다 어떤 경우에는 오류를 수정합니다

대신

SELECT * from X 

의 nullable 정수 필드에.

관련 문제