【问题标题】:LINQ: how to get 1 month recordsLINQ:如何获得 1 个月的记录
【发布时间】:2022-01-19 00:46:12
【问题描述】:

以下查询返回一些每日订单。我想创建另一个查询,该查询将返回 int 一个月内的订单数。问题是有些月份有 29 天,有些是 30 或 31 天。感谢任何帮助!

public int GetNewDailyOrders()
{
    return _DbContext.Carts.Where(x => x.Created >= DateTime.UtcNow.AddDays(-1)).Count();
}

【问题讨论】:

  • Where(x => x.Created.Month == 12?
  • 我想我明白了: return _DbContext.Carts.Where(x => x.Created.Month >= DateTime.UtcNow.Month).Count();但我不完全确定这是正确的解决方案

标签: c# .net linq


【解决方案1】:
public int GetMonthlyOrders(int month, int year)
{

    return _DbContext.Carts.Count(x => x.Created.Year == year && x.Created.Month == month);
}

也许,你应该考虑支持不同的时区,无论是否是夏令时,像这样的

【讨论】:

  • return _DbContext.Carts.Where(x => x.Created.Month >= DateTime.UtcNow.Month && x.Created.Year >= DateTime.UtcNow.Year).Count();这个怎么样?
  • 是的,如果您只想获得当前月份的计数,但没有“>”,但如果您在功能中没有条目或者您想要包含它们,这并不重要跨度>
  • 是的,仅当月的订单总数。谢谢
  • 如果您将来有数据,请删除“>”
【解决方案2】:

我对没人回答的主要抱怨是它操纵表数据,这通常会扼杀数据库使用索引的能力

考虑改为计算日期范围并查询它:

var n = DateTime.Now;
var f = new DateTime(n.Year, n.Month, 1);
var t = new DateTime(n.Year, n.Month + 1, 1);

_dbContext.Carts.Count(c => c.CreatedDate >= f && c.CreatedDate < t);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多