簡體   English   中英

Linq選擇行當月的日期

[英]Linq Select row Where date in Current month

我需要從當月獲取數據。找不到有效的解決方案。

這是我的代碼,它為我提供了我需要的數據,但我從一整個月前獲取數據,而不是從我們所在的當月獲取數據。

我用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 的回答有效,但不是最底層的。

所以我必須為此感謝 Jules:

DateTime.Today.AddDays((DateTime.Today.Day -1) * -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(),
});

您可以像這樣簡單地比較日期的月份部分:

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

您可以使用 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
    }
  );

你可以試試這個: .Where(x => x.EntityDate >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM