0

这是我当前的月份:

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

这没有按预期工作,因为它还在获取去年同月发生的订单。

当然我可以比较年份月份,但必须有一个我不熟悉的更具表现力的解决方案。

如何使用 Linq 干净地做到这一点?(不确定是否相关,但orders它是来自实体框架的 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 回答