【问题标题】:Linq Select row Where date in Current monthLinq选择行当月的日期
【发布时间】:2021-10-04 00:36:39
【问题描述】:

我需要获取当月的数据。一直找不到可行的解决方案。

这是我的代码,它为我提供了我需要的数据,但我从一整个月前获取数据,而不是从我们所在的当月获取数据。

我用row > DateTime.Today.Addmonths(-1)两次选择了日期“限制”

有什么想法吗?

var userQuery = 
from timeEntry in TimeEntries
                                //this displays a month back, not current month TODO: change to current month.
where timeEntry.DateEntity > DateTime.Today.AddMonths(-1)
select new {
    UserName = timeEntry.User.FirstName + " " +timeEntry.User.LastName,
    HoursEntered = timeEntry.HoursEntered,       
    User = timeEntry.User
};

var localrows = userQuery.ToList();

var grouping = localrows.GroupBy(x => x.User);

var userList = grouping.Select(q => new {
    UserName = q.FirstOrDefault().UserName,
    Hours = q.Sum(hr => hr.HoursEntered),                 //AbsenceTypeID = holiday(1)                          // still takes from a whole month, instead of current month.
    Holiday = q.FirstOrDefault().User.Absences.Where(a => a.AbsenceTypeID == 1).Where(date => date.DateEntity > DateTime.Today.AddMonths(-1)).Count(),
});

编辑:

Keyur Patel 的回答有效,但不是最底层的。

所以我要感谢朱尔斯:

DateTime.Today.AddDays((DateTime.Today.Day -1) * -1)

【问题讨论】:

  • 您想要来自(编辑为 -> 来自)当月第一天的数据吗?
  • 我想要与本月匹配的数据,所以如果是 21/9,我想要从 1/9 到 21/9 的数据。所以我们所在月份的数据。
  • 使用这个 DateTime.Today.AddDays((DateTime.Today.Day -1) * -1)
  • 有效^^谢谢。
  • 点击评论,让其他人知道答案。

标签: c# linq datetime


【解决方案1】:

试试这个:

DateTime today = DateTime.Today;
var userQuery = 
from timeEntry in TimeEntries
where timeEntry.DateEntity.Month == today.Month && timeEntry.DateEntity.Year == today.Year
select new {
    UserName = timeEntry.User.FirstName + " " +timeEntry.User.LastName,
    HoursEntered = timeEntry.HoursEntered,       
    User = timeEntry.User
};

添加了对 .Year 的检查,因为它可能与其他年份的月份匹配(如果有的话)。

编辑

假期部分:

var userList = grouping.Select(q => new {
    UserName = q.FirstOrDefault().UserName,
    Hours = q.Sum(hr => hr.HoursEntered),
    Holiday = q.FirstOrDefault().User.Absences.Where(a => a.AbsenceTypeID == 1 && a.DateEntity.Month == today.Month && a.DateEntity.Year == today.Year).Count(),
});

【讨论】:

  • 是的,我错过了第二部分,试试我编辑的版本,如果不行,请告诉我。
  • 结合你的方法和 Jules 的方法让它工作。您的第二部分对我不起作用,不断向我抛出错误^^
  • 第一个有效而第二个无效的唯一方法是 DateTime 对于您的其他表是否可以为空。 (如果是这样,请使用 a.DateEntity.Value.Month 和年份相同)。无论如何,我很高兴你能成功! :)
【解决方案2】:

您可以像这样仅比较日期的月份部分:

timeEntry.DateEntity.Month == DateTime.Now.Month

【讨论】:

  • 这将在不同年份返回“true”
【解决方案3】:

您可以使用 DateTime 类的MonthYear 属性,如下所示:

var userQuery = TimeEntries
  .Where (te => te.DateEntity.Month == DateTime.Today.Month && te.DateEntity.Year == DateTime.Today.Year)
  .Select(timeEntry => 
    new {
      UserName = timeEntry.User.FirstName + " " + timeEntry.User.LastName,
      HoursEntered = timeEntry.HoursEntered,       
      User = timeEntry.User
    }
  );

【讨论】:

  • 不是在查询中一次又一次地检查当前月份,而是在某个变量中选择月份 var currentMonth = DateTime.Today.Month; var currentYear = DateTime.Today.Year;然后 .Where (te => te.DateEntity.Month == currentMonth && te.DateEntity.Year == currentYear)
【解决方案4】:

你可以试试这个: .Where(x => x.EntityDate > DateTime.Now.AddDays(-DateTime.Now.Day).Date);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多