1

我有一个数据表,其中记录有日期字段列,其值如下

11/1/2012
12/21/2012
12/22/2012
1/3/2013
1/5/2013
1/6/2013
1/7/2013
etc. 

我想过滤记录并仅获取当前月份记录,即仅获取日期等于当前月份的那些行(将由 DateTime.now 找到)。我们如何使用 Linq 和 c# 来做到这一点。

4

2 回答 2

8

如果列的类型已经是DateTime

DateTime now = DateTime.Now;
var thisMonthRows = table.AsEnumerable()
    .Where(r =>  r.Field<DateTime>("ColumnName").Year  == now.Year
              && r.Field<DateTime>("ColumnName").Month == now.Month);

如果您想要过滤后的行中的新数据表,请使用CopyToDataTable

DataTable table = thisMonthRows.CopyToDataTable();
于 2013-01-23T10:40:18.643 回答
1

获取每月的第一天并按该日期过滤:

 DateTime today = DateTime.Now.Date;
 DateTime firstDayOfMonth = today.AddDays(1 - today.Day);
 // or new DateTime(today.Year, today.Month, 1);

 var query = from row in dt.AsEnumerable()
             where row.Field<DateTime>("Date") >= firstDayOfMonth
             select row;

当然,如果您没有包含未来日期的记录(例如下个月),这是可行的。如果这样做,那么最好引入新的范围变量以避免两次解析日期:

 var query = from row in dt.AsEnumerable()
             let date = row.Field<DateTime>("Date")
             where date.Year == today.Year && 
                   date.Month == today.Month
             select row;
于 2013-01-23T10:41:49.580 回答