我有一個數據表,其中記錄有值的日期字段列像取得按月過濾行
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#來做到這一點。
我有一個數據表,其中記錄有值的日期字段列像取得按月過濾行
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#來做到這一點。
如果列的類型已經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();
找那個月和過濾的第一天日期:
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;
你在'firstDayOfMonth'中有一個錯誤的錯誤,我不確定這是什麼OP在之後。 – Rawling
而downvote的原因是?因爲只有一個日期解析和明確的過濾意圖? –
@在英語中推廣什麼? –
如何把thisMonthRows DataTable中? – user1254053
@ user1254053:編輯我的答案。 –