0

ここに私の現在の月:

model.SalesForMonth = orders.Where(o => o.DateOfPayment.Value.Month == DateTime.Now.Month)
                            .Select(o => o.Total)
                            .Sum();

これは、昨年の同じ月に発生した注文も取得しているため、期待どおりに機能していません。

確かに年月を比較することはできますが、私がよく知らない、より表現力豊かな解決策があるはずです。

Linqを使用してこれをきれいに行うにはどうすればよいですか? (関連性がordersあるかどうかはわかりませんが、Entity Framework の IQueryable です)

4

2 に答える 2

6

最も簡単な方法は、開始点と終了点を作成することです。

// TODO: Consider what time zone you want to consider the current date in
var today = DateTime.Today;
var start = new DateTime(today.Year, today.Month, 1);
var end = start.AddMonths(1); // Exclusive end-point

var query = orders.Where(o => o.DateOfPayment.Value >= start &&
                              o.DateOfPayment.Value < end)
                        .Sum(o => o.Total)
于 2012-04-07T20:07:35.123 に答える
0

私はあなたが何を望んでいるのか分かりません。注文が今年のものであることを確認するには、年も比較する必要があります。私はあなたがlinqでこのようにそれを行うことができると思います:

    model.SalesForMonth = orders.Where(o => (o.DateOfPayment.Value.Month == DateTime.Now.Month
 && o.DateOfPayment.Value.Year == DateTime.Now.Year))
                                .Select(o => o.Total)
                                .Sum();
于 2012-04-07T20:07:48.450 に答える