0

2クラス

   public class Student
    {
        public int StudentID { get; set;}
        public string Name { get; set;}
        public List<Fee> Fees {get;set;}
    }

    public class Fee
    {
        public int FeeID { get; set;}
        public decimal FeeAmount { get; set; }
    }

10人の学生オブジェクトがあるとしましょうStudent[]stud = new Student [10]

stud [0]に2つの料金(Fee [2])があり、

FeeID=1, FeeAmount=54.23
FeeID=2, FeeAmount=234.98

stud [1]に1つの料金(Fee [2])があり、

FeeID=1, FeeAmount=9.99

stud [2]に3つの料金(Fee [3])があり、

FeeID=1, FeeAmount=123.45
FeeID=2, FeeAmount=67.89
FeeID=3, FeeAmount=987.65

学生コレクションをTotalAmount(料金コレクション)で並べ替える必要があります

TotalAmount of Fee 
stud[0] = 54.23+234.98=289.21
stud[1] = =9,99
stud[2] = 123.45+67.89+987.65=1178.99

そこにソートした後、それはなるはずです

stud[0] = 123.45+67.89+987.65=1178.99
stud[1] = 54.23+234.98=289.21
stud[2] = =9,99
4

5 に答える 5

3

あなたがただ欲しいように聞こえます:

stud = stud.OrderByDescending(x => x.Fees.Sum(fee => fee.FeeAmount)).ToArray();

LINQが大好きです:)

注意すべき点がいくつかあります。

  • これは、学生ごとに一度だけ料金の合計を計算します
  • これは現在 null 要素を処理しません。する必要がありますか?(あなたは固定の配列サイズを持っているようです...おそらくList<Student>代わりに使用しますか?)
  • 後で実際に配列として必要でない限り、ToArray呼び出しをドロップしてください。orを使用しない限り、反復するたびにソートされることに注意してください。ToArrayToList
于 2013-03-12T22:22:23.173 に答える
2
var results = stud.OrderByDescending(s => s.Fees.Sum(f => f.FeeAmount)).ToArray();
于 2013-03-12T22:22:54.653 に答える
0

単純な Linq クエリで作業を行う必要があります。

stud =
    (from s in stud
     orderby s.Fees.Sum(f => f.FeeAmount)
     select s)
    .ToArray();
于 2013-03-12T22:23:17.750 に答える
0
var students = new List<Student>() { .. add students here ... };
students.OrderBy(x => x.Fees.Sum(y => y.FeeAmount));
于 2013-03-12T22:24:00.130 に答える
0

また、古い .net フレームワーク (Linq なし) を使用している場合:

public class Student : IComparable
{
    public int StudentID { get; set; }
    public string Name { get; set; }
    public List<Fee> Fees { get; set; }

    private decimal TotalAmount
    {
        get
        {
            decimal total = 0;
            if (Fees != null)
                foreach (var fee in Fees)
                    total += fee.FeeAmount;
            return total;
        }
    }

    public int CompareTo(object obj)
    {
        //Ascending
        //return TotalAmount.CompareTo((obj as Student).TotalAmount);

        //Descending
        return (obj as Student).TotalAmount.CompareTo(TotalAmount);
    }
}

public class Fee
{
    public int FeeID { get; set; }
    public decimal FeeAmount { get; set; }
}


List<Student> students = new List<Student>();
...
students.Sort();

Linqの方がいいです...

于 2013-03-12T22:40:24.343 に答える