C# 正在获取本月的所有订单

C# 正在获取本月的所有订单,c#,datetime,iqueryable,date-range,C#,Datetime,Iqueryable,Date Range,以下是我的当前月份: model.SalesForMonth = orders.Where(o => o.DateOfPayment.Value.Month == DateTime.Now.Month) .Select(o => o.Total) .Sum(); 这并不像预期的那样有效,因为它也在去年同一个月收到订单 当然,我可以比较年和月,但一定有一个更具表现力的解决方

以下是我的当前月份:

model.SalesForMonth = orders.Where(o => o.DateOfPayment.Value.Month == DateTime.Now.Month)
                            .Select(o => o.Total)
                            .Sum();
这并不像预期的那样有效,因为它也在去年同一个月收到订单

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


如何使用Linq干净地执行此操作?(不确定是否相关,但
订单
是实体框架的IQueryable)

最简单的方法是创建起点和终点:

// 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)
<代码> /tOD:考虑在什么时区中考虑当前日期 var today=DateTime.today; var start=新的日期时间(今天.年,今天.月,1); var end=start.AddMonths(1);//独占端点 var query=订单。其中(o=>o.DateOfPayment.Value>=start&& o、 付款日期。价值<结束) .Sum(o=>o.Total)
最简单的方法是创建起点和终点:

// 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)
<代码> /tOD:考虑在什么时区中考虑当前日期 var today=DateTime.today; var start=新的日期时间(今天.年,今天.月,1); var end=start.AddMonths(1);//独占端点 var query=订单。其中(o=>o.DateOfPayment.Value>=start&& o、 付款日期。价值<结束) .Sum(o=>o.Total)
我不确定你想要什么。您还必须比较年份,以确保订单来自今年。 我想你可以用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();

我不知道你想要什么。您还必须比较年份,以确保订单来自今年。 我想你可以用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();

您的查询方法并不简单,因为它需要数据库中的日期处理函数,而不是简单的范围查询(如Jon的答案)。此外,DateOfPayment列上的简单索引不会用于您的查询-两个表达式索引可以同时保存该字段的月份和年份,尽管我确信这不是一个好方法。您的查询方法并不简单,因为它需要数据库中的日期处理函数,而不是简单的范围查询(如Jon的回答)。此外,DateOfPayment列上的简单索引不会与您的查询一起使用-两个表达式索引可以同时保存该字段的月份和年份,尽管我确信这不是一个好方法。