2013-01-23 35 views
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#来做到这一点。

回答

5

如果列的类型已经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); 

如果你想有一个新的DataTable从过滤行使用CopyToDataTable

DataTable table = thisMonthRows.CopyToDataTable(); 
+0

如何把thisMonthRows DataTable中? – user1254053

+0

@ user1254053:编辑我的答案。 –

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; 
+0

你在'firstDayOfMonth'中有一个错误的错误,我不确定这是什么OP在之后。 – Rawling

+0

而downvote的原因是?因为只有一个日期解析和明确的过滤意图? –

+0

@在英语中推广什么? –