2012-08-09 2 views
1

사실, 도시별로 학생 목록을 그룹화하려고합니다. 내가 이것을 실행할 때 s2.City 근처의 LINQ 문에서 "Object Reference"오류가 발생합니다.LINQ 쿼리 처리 중 오류가 발생했습니다.

class Groupby 
    { 
     Student[] s = new Student[10]; 

     public Groupby() 
     { 
      s[0] = new Student("Manikandan", "Jayagopi", "Chennai"); 

      s[1] = new Student("Ganesh", "Bayyanna", "Bangalore"); 

      s[2] = new Student("Laxman", "Bharghav", "Hyderabad"); 

      s[3] = new Student("Dinesh","Vellaiyan","Pune"); 

      s[4] = new Student("Natarajan","Nallathambi","Chennai"); 
     } 

     public void Group() 
     {     
      var groupQuery = from s2 in s 
          group s2 by s2.City; 

      foreach (Student s1 in groupQuery) 
       Console.WriteLine(" {0}", s1.FirstName); 

     } 
    } 

class Program 
    { 
static void Main() 
     {    
      Groupby objGroupby = new Groupby(); 

      objGroupby.Group(); 

      Console.ReadLine(); 
     } 
    } 

나를 도와 줄 수있는 사람이 있습니까?

미리 감사

답변

0
public void Group() 
    { 
     var groupQuery = from s2 in s 
         where s2 != null 
         group s2 by s2.City; 

     foreach (var s1 in groupQuery) 
     { 
      Console.WriteLine("Group: {0}", s1.Key); 
      foreach(var s in s1) 
      { 
       Console.WriteLine("Student: {0}", s.FirstName); 
      } 
     } 

    } 

해당 그룹의 학생에게 액세스하려면 먼저 그룹을 반복해야합니다.

희망이 있습니다.

+0

대단히 감사합니다! 그 점이 나에게 정말 도움이되었습니다. – Manikandan

5

에서 당신은 10 개 항목의 배열을 가지고 만 (5) 기타 (5) null 배열 해결했습니다되기 때문에 길이를 초기화했다. 즉, s2.CityNullReferenceException이됩니다. 그래서 중 하나를

List<Student> s = new List<Student>(); 
/// 
s.Add(new Student { ... }); // etc 
  • 확인 null에 대한 :

    var groupQuery = from s2 in s 
           where s2 != null 
           group s2 by s2.City; 
    

    Student[] s = new Student[5]; 
    
  • 대신 배열의 List<T>를 사용

    • 배열을 특대하지 않습니다

  • +0

    감사합니다. Marc! 세 번째 옵션에서 말한대로 사용할 때 foreach 루프에서 "캐스팅 할 수 없음"오류가 발생합니다. – Manikandan

    1

    크기가 10 인 배열을 만들면 배열에 5 개의 개체 만 채우므로 표시 5 - 9는 NULL 참조입니다. 나중에 NULL 참조의 속성을 읽으려고하기 때문에 객체의 속성별로 그룹화하고 잘못된 점이 있습니다.

    관련 문제