0

我有以下代码来遍历学生对象列表。目的是逐个遍历列表中的每个 Student 对象,访问每个学生对象的 Fees 属性(它是一个数组),并对每个学生的 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 可以使用 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)));
    }
}

希望会有所帮助。

于 2013-10-04T12:00:06.933 回答