2013-10-03 25 views
0

我有以下代碼來查看Student對象列表。其目的是逐個遍歷列表中的每個Student對象,逐個訪問每個學生對象的Fees屬性(這是一個數組),併爲每個學生排列費用陣列。簡而言之,代碼的目的是通過DueDate爲列表中的每個學生對象對每個費用排序。在排序過程中重複數據和寫入數據

foreach (var resultSet in globalResultSet) 
{ 
    for(var i=0; i < resultSet.Length; i++) 
    { 
     resultSet[i].Fees = resultSet[i].Fees.ToList().OrderBy(x => x.DueDate).ToArray(); 
    } 
} 

代碼工作,但問題是,因爲賦值運算符,每一個獨特的學生對象將具有同一組的分類收費。

例如,在運行代碼後,如果學生A有費用1,2,3,那麼學生B,C ... n在排序後也都會收取費用1,2,3。

解決此問題的最佳方法是什麼?

我想按日期排列每個學生的費用,但我不希望他們都得到相同的結果。所有學生都應該有自己獨特的一套排序費用,而不是全部都有相同的費用。

請幫忙。

-------- --------編輯

按照要求,這裏是globalResultSet的解釋。

我在做什麼是通過wcf服務發送一些學生數據,以獲得與每個學生相關的學費。下面的代碼顯示了這個過程的工作原理。重要的是要注意的是,除了一些基本的數據類型,每個學生對象都有一個屬性是一個數組(這是每個學生存儲費用的地方)。但是當我嘗試爲每個學生對象排列數組時,所有學生都得到相同的排序費用。即,他們都有相同的費用排列,當每個學生應該排序後有一個獨特的排序費用陣列。

// global variable 

private List<MyService.Student[]> globalResultSet = new List<MyService.Student[]>(); 

// then the rest in an event handler 

ServiceClient client = new ServiceClient(); 
MyService.Student student = new MyService.Student(); 

for (int i = 0; i < students.Count; i++) 
{ 
    if (students[i].StudentID > 0) 
    { 
     student.StudentID = students[i].StudentID; 
     student.FirstName = students[i].FirstName; 
     student.LastName = students[i].LastName; 

     MyService.Student[] restultSet = client.GetFees(new MyService.Student[] { student }); 

     globalResultSet.Add(restultSet); 
    } 
    else 
    { 
     continue; 
    } 
} 

client.Close(); 

if (globalResultSet.Count > 0) 
{ 
    MessageBox.Show("Data loaded", "", MessageBoxButtons.OK); 
} 
else 
{ 
    MessageBox.Show("Data NOT loaded", "Error", MessageBoxButtons.OK); 
} 
+1

你在對象中有什麼:globalResultSet。你可以發佈該代碼嗎? – mmssaann

+0

@mmssaann,請參閱問題中的編輯。這應該提供關於'globalResultSet'的答案。請致電 – Zolt

+0

!有沒有人知道解決這個問題的方法? – Zolt

回答

0

U可以使用Sort方法對DueDate進行比較,它將直接對數組進行排序並避免重複效果。 試試這個:

foreach (var resultSet in globalResultSet) 
{ 
    for(var i=0; i < resultSet.Length; i++) 
    { 
     resultSet[i].Fees.ToList().Sort(new Comparison<FeesType>((x, y) => DateTime.Compare(x.DueDate, y.DueDate))); 
    } 
} 

希望對你有幫助。