0

Student オブジェクトのリストを調べる次のコードがあります。目的は、リスト内の各 Student オブジェクトを 1 つずつ反復処理し、各 Student オブジェクトの Fees プロパティ (配列) にアクセスし、各 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);
}
4

1 に答える 1

0

U は、DueDate の比較で Sort メソッドを使用できます。これにより、配列が直接並べ替えられ、再影響が回避されます。これを試して:

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)));
    }
}

希望が助けになります。

于 2013-10-04T12:00:06.933 に答える