2012-08-09 196 views
1

其實我試圖按城市對學生列表進行分組。當我執行此操作時,在s2.City附近的LINQ語句中出現「對象引用」錯誤。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

非常感謝Kyor!這真的幫我解決了問題! – Manikandan 2012-08-09 10:34:54

5

你具有10項的陣列,並且只初始化5.其他5 null因爲數組具有固定長度。這意味着s2.City將導致NullReferenceException。所以之一:

  • 不特大型數組:

    Student[] s = new Student[5]; 
    
  • 使用List<T>而不是數組:

    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; 
    
+0

謝謝馬克!當我在第三個選項中使用時,我在foreach循環中出現「無法投射」錯誤。 – Manikandan 2012-08-09 10:26:16

1

您可以創建一個大小爲10的數組,因此只能使用5個對象填充數組,因此5號到9號是NULL引用。後來,你通過對象的屬性進行分組,並且瞧,那就是它出錯的地方,因爲你試圖讀取一個NULL引用的屬性。