0

単純な問題のように見えるものに困惑しました。私は持っています

var SummaryCollection = (from n in ...long criteria with group by clause) 
into g select new 
{     MonthYear = g.Key, 
      Amount = g.Sum(p=>p.Amount)}).OrderBy(p=>p.MonthYear);
}

このようなデータを取得しました

Jan2009 $100
Feb2009 $134
... and so on

最後に私は持っています

  decimal avgAmount = (from x in SummaryCollection select x.Amount).Average();

ここで、ユーザーがテキストボックスにNを入力した過去Nか月の平均を取得する必要があります。Linqを使用して、順序付けられたコレクションから最後のNの平均を取得する方法をアドバイスしてください。ありがとうございました

4

2 に答える 2

3

コレクション内のアイテムの数がわかっている(または使用している)場合は、最初のアイテムCount()をスキップできます。Count - N

 decimal avgAmount = SummaryCollection.Skip(SummaryCollection.Count() - N)
                                      .Select(x => x.Amount)
                                      .Average();
于 2012-05-23T21:43:21.620 に答える
3

シーケンスの呼び出しや複数回の反復をQueue<T>必要としないを使用する拡張メソッドを作成しました。.Count

public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> @this, int n) {
    var queue = new Queue<T>(n + 1);

    foreach (var element in @this) {
        queue.Enqueue(element);

        if(queue.Count > n) queue.Dequeue();
    }

    return queue;
}

これを使用するには、リストが呼び出された場合はsequence、を呼び出しsequence.TakeLast(n)て最後のnレコードを取得します。

于 2012-05-23T22:06:49.400 に答える