0

次のように結果を表示する Linq クエリを作成する必要があります。

Data:

Sales   Month
----------------------
10      January
20      February
30      March
40      April
50      May
60      June
70      July
80      August
90      September
100     October
110     November
120     December

このシナリオに基づいて結果を取得する必要があります。 月 x = 月 x + 前月の 結果は次のようになります。

Sales   Month
--------------------
10      January
30      February (30 = February 20 + January 10)
60      March    (60 = March 30 + February 30)
100     April    (100 = April 40 + March 60)
.........

このクエリを作成する方法はありますか?

どうもありがとう!

4

2 に答える 2

0

各月の以前の売上をすべて合計したくない場合は、何らかの形で総売上を追跡する必要があります。リストを作成し、その最後の要素を次の要素を計算するための現在の合計として使用できるため、Aggregate 関数はこれに対して問題なく機能します。

var sales = Enumerable.Range(1,12).Select(x => x * 10).ToList();
var sums = sales.Aggregate(new List<int>(), (list, sale) => list.Concat(new List<int>{list.LastOrDefault() + sale});
于 2012-06-27T04:35:23.127 に答える
0

あなたはLINQでそれを望んでいたので...

void Main()
{
    List<SaleCount> sales = new List<SaleCount>() {
        new SaleCount() { Sales = 10, Month = 1 },
        new SaleCount() { Sales = 20, Month = 2 },
        new SaleCount() { Sales = 30, Month = 3 },
        new SaleCount() { Sales = 40, Month = 4 },
        ...
    };

    var query = sales.Select ((s, i) => new
    {
        CurrentMonth = s.Month,
        CurrentAndPreviousSales = s.Sales + sales.Take(i).Sum(sa => sa.Sales)
    });
}

public class SaleCount
{
    public int Sales { get; set; }
    public int Month { get; set; }
}

...しかし、私の意見では、これは、LINQ クエリが生成するコードを書き出すだけでは、派手な LINQ を考え出すことができない場合です。これもスケーリングしません。たとえば、複数年分のデータを含めると、「昔ながらの方法」で書き出す必要がない場合でも、さらに複雑になります。

于 2012-06-27T02:30:35.603 に答える